Несмотря на то, что это работает и очень просто, кажется, что это больше взломать. Что вы можете сделать, это создать атрибут, производный от 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, ...)
{
...
}
Этот атрибут также можно применять на уровне контроллера.
Первоначально я пытался установить тип содержимого в фильтре действий, но проблема в OnActionExecuting
возникает после выбора поставщиков значения, поэтому установка типа содержимого происходит слишком поздно.
OnAuthorization
происходит до того, как будут выбраны провайдеры значений, и поскольку JsonValueProviderFactory
проверяет Request.ContentType.StartsWith("application/json")
, это гарантирует, что он выбран.