bec*_*lmw 39 asp.net asp.net-mvc-2
默认情况下,ASP.NET MVC 2.0将在操作尝试返回JSON以响应GET请求时抛出异常.我知道这可以通过使用JsonRequestBehavior.AllowGet逐个方法覆盖,但是可以在控制器或更高的基础上设置(可能是web.config)吗?
更新:Per Levi的评论,这是我最终使用的 -
protected override JsonResult Json(object data, string contentType, System.Text.Encoding contentEncoding)
{
return Json(data, contentType, JsonRequestBehavior.AllowGet);
}
Run Code Online (Sandbox Code Playgroud)
Lev*_*evi 26
与其他MVC特定的设置一样,这不能通过Web.config设置.但是你有两个选择:
覆盖Controller.Json(object,string,Encoding)重载以调用Json(object,string,Encoding,JsonRequestBehavior),将JsonRequestBehavior.AllowGet作为最后一个参数传递.如果您希望将其应用于所有控制器,则在抽象基本控制器类中执行此操作,然后让所有控制器为该抽象类创建子类.
创建一个扩展方法MyJson(this Controller,...),它创建一个JsonResult并设置相应的属性,然后通过this.MyJson(...)从控制器中调用它.
Dav*_*nde 24
还有另一种选择.使用动作过滤器.
创建一个新的ActionFilterAttribute,将其应用于您的控制器或特定操作(根据您的需要).这应该足够了:
public class JsonRequestBehaviorAttribute : ActionFilterAttribute
{
private JsonRequestBehavior Behavior { get; set; }
public JsonRequestBehaviorAttribute()
{
Behavior = JsonRequestBehavior.AllowGet;
}
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
var result = filterContext.Result as JsonResult;
if (result != null)
{
result.JsonRequestBehavior = Behavior;
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后像这样应用:
[JsonRequestBehavior]
public class Upload2Controller : Controller
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16871 次 |
| 最近记录: |