I'd like to implement an extension me开发者_开发技巧thod IsJsonRequest() : bool on the HttpRequestBase type. In broad terms what should this method look like and are there any reference implementations?
This is a private API.
Edit:
Suggestion; check if the x-requested-with header is "xmlhttprequest"?
This will check the content type and the X-Requested-With header which pretty much all javascript frameworks use:
public bool IsJsonRequest() {
string requestedWith = Request.ServerVariables["HTTP_X_REQUESTED_WITH"] ?? string.Empty;
return string.Compare(requestedWith, "XMLHttpRequest", true) == 0
&& Request.ContentType.ToLower().Contains("application/json");
}
I was having the same issues but for whatever reason jQuery's $.get was not sending a Content Type. Instead I had to check in the Request.AcceptTypes for "application/json."
Hope this helps others with the same problem in the future.
As it is a private API, you have control over the content type for JSON, so simply check it is the agreed value.
e.g.
public static bool IsJsonRequest(this HttpRequestBase request)
{
bool returnValue = false;
if(request.ContentType == "application/json")
returnValue = true;
return returnValue;
}
精彩评论