2013-12-06 3 views
0

на ASP.NET MVC 5 У меня есть следующий контроллер:Никаких действий не найдены в контроллере

[Route("500", Name="InternalError"), HttpGet] 
public virtual ActionResult Internal() { 

    ErrorInternalModel model = new ErrorInternalModel("Internal error") 
    Response.StatusCode = (Int32)HttpStatusCode.InternalServerError; 
    return View(model); 

} // Internal 

На моей HandleErrorModule я следующее:

public void Init(HttpApplication application) { 

    RouteData data = new RouteData(); 

    data.Values["controller"] = "error"; 
    data.Values["action"] = "internal"; 

    ((IController)new ErrorController()).Execute(new RequestContext(new HttpContextWrapper(application.Context), data)); 
} 

Я получаю ошибку:

Исключение типа «System.Web.HttpException» произошло в System.Web.Mvc.dll, но не было обработано в коде пользователя

Дополнительная информация: Открытый метод действия 'internal' не найден на контроллере 'MVCPRJ.ErrorController'.

Я был в состоянии отобразить вид, используя следующие:

System.Web.HttpContext c = System.Web.HttpContext.Current; 
c.RewritePath("/500", false); 
c.Server.TransferRequest("/500", true); 

Так маршрут существует ...

Проблема заключается в том, как я это нужно иметь маршрут жестко закодированных в модуле.

Я хотел бы получить маршрут от действия ...

Я также пытался получить его по имени. Обратите внимание, что название маршрута «InternalError» ...

Но не повезло ... Любая идея, как это решить?

Спасибо, Miguel

+1

случае чувствительности? 'internal' vs' Internal'? – Jamiec

+0

Нет, я попробовал оба и не работал ... –

ответ

0

Первое, что я заметил, что вы не определили, что возвращаемое значение виртуального метода.

Пример:

public partial class ErrorController : Controller { 
    [Route("500"), HttpGet] 
    public virtual ActionResult Internal() { 
    Return View(); 
    } 
} 

Также возможно, что ваш маршрутизации не был создан автоматически маршрут до нужной страницы должен быть не действие, определенное. Немного больше информации может быть полезно для поиска проблемы, с которой вы столкнулись.

+0

На самом деле я действительно вернул представление ... Я просто пропустил эту часть кода. О том, что моя «маршрутизация не была настроена для автоматического перехода на требуемую страницу, если не будет определено действие», на самом деле я использую только атрибутRouting, теперь вы упоминаете ... Поэтому, используя только AttributeRouting из MVC 5, как я могу это сделать это? –

+0

Я бы порекомендовал пройти через блог: http://blogs.msdn.com/b/webdev/archive/2013/10/17/attribute-routing-in-asp-net-mvc-5.aspx – talegna

+0

Да , Я прочитал это ... Моя проблема заключается не в вызове, а в действии от aa View или Controller. Моя проблема заключается в этом модуле ... Я также попытался указать маршрут «Внутренний», а затем использовать data.Values ​​["name"] = "Internal"; но не повезло. Любая идея, как это решить? –

0

Попробуйте закомментировать эту строку, она работает для меня

[Route("500", Name="InternalError"), HttpGet] 
Смежные вопросы