これは機能しますが、非常に簡単ですが、それはより多くのハックのようです。できることは、AuthorizeAttribute
から派生した属性を作成し、OnAuthorization
でContent-Typeをapplication/jsonに設定することです。
public class JsonActionAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
filterContext.HttpContext.Request.ContentType = "application/json";
}
}
[JsonAction]
public ActionResult JsonOnlyAction(string var1, int var2, ...)
{
...
}
この属性は、コントローラレベルでも適用できます。
もともと私はアクションフィルタでのContent-Typeを設定しようとしたが、問題がOnActionExecuting
では後の値プロバイダがそのように遅すぎるがあり、コンテンツタイプを設定し、選択されて起こります。
OnAuthorization
は前の値プロバイダーが選択されて発生し、Request.ContentType.StartsWith("application/json")
このためJsonValueProviderFactory
チェックするので、それが選択されていることを確認します。
私はこれが本当の答えではないことを知っていますが、誰かが言うように、「ああ、私はXMLで結果を得ることができますか?他のフォーマットに柔軟性を持たせ、オープンにする価値があります。 – Magrangs
私は実際に(少なくともそうする可能性がある)最も幅広いフォーマットをサポートしたいと思っていますが、コンテンツタイプのヘッダーは私の消費者の70%が設定するのに問題になることがありますAPI。 – artvolk
私はあなたが何を意味するかを見て、それは非常に迷惑でなければならない!あなたはコンテンツタイプのヘッダーを設定できない場合は、APIを使用して何を行っているのですか? ;-) – Magrangs