我發現Pete Kirkham answer非常有用。我認爲這應該被標記爲解決方案。
這是根據它我的代碼:
/// <summary>
/// Determines whether the request is a Json Request
/// </summary>
public static bool GetIsJsonRequest(HttpRequest request)
{
if (request == null)
{
throw new ArgumentNullException("request");
}
bool rtn = false;
const string jsonMime = "application/json";
if (request.AcceptTypes!=null)
{
rtn = request.AcceptTypes.Any(t => t.Equals(jsonMime, StringComparison.OrdinalIgnoreCase));
}
return rtn || request.ContentType.Split(new[] {';'}, StringSplitOptions.RemoveEmptyEntries).Any(t => t.Equals(jsonMime, StringComparison.OrdinalIgnoreCase));
}
--- UPDATE ---
Foollowing @Mvision suggestion這是MVC版本:
public static bool GetIsJsonRequest(HttpRequestBase request)
{
if (request == null)
{
throw new ArgumentNullException("request");
}
bool rtn = false;
const string jsonMime = "application/json";
if (request.AcceptTypes!=null)
{
rtn = request.AcceptTypes.Any(t => t.Equals(jsonMime, StringComparison.OrdinalIgnoreCase));
}
return rtn || request.ContentType.Split(new[] {';'}, StringSplitOptions.RemoveEmptyEntries).Any(t => t.Equals(jsonMime, StringComparison.OrdinalIgnoreCase));
}
如果您需要使用此方法在asp.net classic和MVC中,第二個是建議的。 要轉換HttpRequest
在HttpREquestBase
只是HttpRequestWrapper
把它包:
public static bool GetIsJsonRequest(HttpRequest request)
{
return GetIsJsonRequest(new HttpRequestWrapper(request));
}
爲什麼你需要檢測JSON接受類型?我只是好奇,因爲我使用單獨的方法JSON結果 – xelibrion 2011-06-03 05:30:35
@Xelibrion我想重複使用相同的動作,沒有重複的點,如果唯一的區別是結果類型,我可以很容易地檢測到上面的代碼。 – Dax70 2011-06-09 22:37:47