如何强制控制器/动作使用JsonValueProvider

时间:2012-01-27 15:47:33

标签: asp.net json asp.net-mvc-3

美好的一天!

我使用内置JsonValueProvider的ASP.NET MVC 3。

问题是它只有在指定Content-Type: application/json时才有效。

我正在构建一个API,其中JSON是唯一受支持的格式,我不想强​​制客户端设置此标头。

有没有办法强制控制器/动作使用特定的ValueProvider?

2 个答案:

答案 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"

您可以创建一个动作过滤器/属性,以避免在多个动作中重复此行。