Для тих із вас, хто використовує HttpSelfHostServer, цей розділ коду не працює на HttpContext.Current, оскільки він не існує на самому сервері хоста.
private Tuple<bool, string> IsJsonpRequest()
{
if(HttpContext.Current.Request.HttpMethod != "GET")
return new Tuple<bool, string>(false, null);
var callback = HttpContext.Current.Request.QueryString[CallbackQueryParameter];
return new Tuple<bool, string>(!string.IsNullOrEmpty(callback), callback);
}
Однак ви можете перехопити "контекст" самовлаштування через це переопрацювання.
public override MediaTypeFormatter GetPerRequestFormatterInstance(Type type, HttpRequestMessage request, MediaTypeHeaderValue mediaType)
{
_method = request.Method;
_callbackMethodName =
request.GetQueryNameValuePairs()
.Where(x => x.Key == CallbackQueryParameter)
.Select(x => x.Value)
.FirstOrDefault();
return base.GetPerRequestFormatterInstance(type, request, mediaType);
}
Запит. Метод дасть вам "GET", "POST" тощо, і GetQueryNameValuePairs може отримати параметр "зворотний виклик". Таким чином мій переглянений код виглядає так:
private Tuple<bool, string> IsJsonpRequest()
{
if (_method.Method != "GET")
return new Tuple<bool, string>(false, null);
return new Tuple<bool, string>(!string.IsNullOrEmpty(_callbackMethodName), _callbackMethodName);
}
Сподіваюся, це допоможе комусь із вас. Таким чином, вам не обов’язково потрібна прошивка HttpContext.
C.