Đối với những người bạn đang sử dụng HTTPSelfhostServer, phần mã này sẽ thất bại trên HttpContext.C hiện tại, vì nó không tồn tại trên máy chủ tự lưu trữ.
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);
}
Tuy nhiên, bạn có thể chặn "bối cảnh" tự lưu trữ thông qua ghi đè này.
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);
}
Request.Method sẽ cung cấp cho bạn "GET", "POST", v.v. và GetQueryNameValuePairs có thể truy xuất tham số? Callback. Do đó, mã sửa đổi của tôi trông giống như:
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);
}
Hi vọng điều này giúp được cho một vài bạn. Bằng cách này, bạn không nhất thiết cần một shim httpContext.
C.