我想这样做:
public ActionResult Details(int id)
{
Object ent = new{ prop1 = 1, prop2 = 2};
if (Request.AcceptTypes.Contains("application/json"))
return Json(ent, JsonRequestBehavior.AllowGet);
ViewData.Model = ent;
return View();
}但想知道是否有更好的方法(并内置)来检测传入的build请求,类似于IsAjaxRequest。我想使用相同的url,所以最好不要处理格式扩展,比如".json",".html“等。
另外,我不想让jsonrequest和返回视图的普通web请求有不同的url。
发布于 2011-02-26 00:07:54
在BaseController中使用ActionFilterAttribute。并从BaseController继承所有其他控制器
[IsJsonRequest]
public abstract class BaseController : Controller
{
public bool IsJsonRequest { get; set; }
}
The ActionFilterAttribute
public class IsJsonRequest: ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var myController = filterContext.Controller as MyController;
if (myController != null)
{
if (filterContext.HttpContext.Request.AcceptTypes.Contains("application/json"))
{
myController.IsJsonRequest = true;
}
else
{
myController.IsJsonRequest = false;
}
}
}
}
public class TestController : BaseController
{
public ActionResult Details(int id)
{
if (IsJsonRequest)
return Json Data
else
return view
}
}https://stackoverflow.com/questions/5117993
复制相似问题