Рассмотрим MapRoute:Пользовательские объекты в качестве аргументов в методах контроллеров, определенных MapRoutes
MapRoute(
"ResultFormat",
"{controller}/{action}/{id}.{resultFormat}",
new { controller = "Home", action = "Index", id = 0, resultFormat = "json" }
);
И это метод контроллера:
public ActionResult Index(Int32 id, String resultFormat)
{
var dc = new Models.DataContext();
var messages = from m in dc.Messages where m.MessageId == id select m;
if (resultFormat == "json")
{
return Json(messages, JsonRequestBehavior.AllowGet); // case 2
}
else
{
return View(messages); // case 1
}
}
Вот сценарии URL
Home/Index/1
пропадут случай 1Home/Index/1.html
пойдет к случаю 1Home/Index/1.json
будет идти к случаю 2
Это хорошо работает. Но я ненавижу проверку строк. Как бы реализовать параметр enum, который будет использоваться в качестве параметра resultFormat
в методе контроллера?
Некоторые псевдокод объяснить основную идею:
namespace Models
{
public enum ResponseType
{
HTML = 0,
JSON = 1,
Text = 2
}
}
MapRoute:
MapRoute(
"ResultFormat",
"{controller}/{action}/{id}.{resultFormat}",
new {
controller = "Home",
action = "Index",
id = 0,
resultFormat = Models.ResultFormat.HTML
}
);
Метод контроллера подписи:
public ActionResult Index(Int32 id, Models.ResultFormat resultFormat)
Я не могу получить ваш пример кода для работы. Я разместил здесь новый вопрос: http://stackoverflow.com/questions/1662216/return-jsonresult-using-an-actionfilter-on-a-controller Было бы здорово, если бы вы посмотрели – roosteronacid
Какие конкретные проблемы у вас есть? Как было предложено в качестве ответа в другом вопросе, вам нужно переопределить OnActionExecuted вместо метода OnResultExecuting, потому что последний работает до действия контроллера, и модель всегда будет «null». –