美好的一天!
我使用内置JsonValueProvider的ASP.NET MVC 3。
问题是它只有在指定Content-Type: application/json
时才有效。
我正在构建一个API,其中JSON是唯一受支持的格式,我不想强制客户端设置此标头。
有没有办法强制控制器/动作使用特定的ValueProvider?
答案 0 :(得分:2)
虽然这很有效但很简单,但它似乎更像是一种黑客攻击。您可以做的是创建一个派生自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,但选择了值提供程序后出现问题{em>},因此设置内容类型为时已晚。
OnActionExecuting
在选择值提供程序之前发生,并且由于OnAuthorization
检查JsonValueProviderFactory
,这将确保它被选中。
答案 1 :(得分:0)
如果我误解了这个问题,我很抱歉,但这不是你需要做的事情:
Response.ContentType = "application/json"
您可以创建一个动作过滤器/属性,以避免在多个动作中重复此行。