【问题标题】:MVC 4 Web API Areas 404 Error: "The controller for path '/Jobs/Send' was not found or does not implement IController."MVC 4 Web API 区域 404 错误:“路径 '/Jobs/Send' 的控制器未找到或未实现 IController。”
【发布时间】:2012-09-06 00:00:02
【问题描述】:

我遇到了一个让我发疯的问题。

我有一个定义了多个区域的 MVC 4 WebAPI 应用程序。

我的工作区发送控制器 (SendController.cs) 定义如下:

namespace TargetAPI.Areas.Jobs.Controllers
{
    public class SendController : ApiController
    {
        [HttpPost]
        public HttpResponseMessage Index(SendRequest req)
        {
            try
            {
            //blah blah
            }
            catch (Exception ex)
            {
            //blah blah
            }
        }
    }
}

我的 Jobs Area Registration (JobsAreaRegistration.cs) 定义如下:

namespace TargetAPI.Areas.Jobs
{
    public class JobsAreaRegistration : AreaRegistration
    {
        public override string AreaName
        {
            get
            {
                return "Jobs";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "Jobs_long",
                "Jobs/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional },
                new[] { "TargetAPI.Areas.Jobs.Controllers" }
            );
        }
    }
}

我的 RouteConfig.cs 说:

namespace TargetAPI
{
    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                 name: "Default",
                 url: "{controller}/{action}/{id}",
                 defaults: new { controller = "Home", 
                     action = "Index", id= UrlParameter.Optional },
                 namespaces: new string[] { "TargetAPI.Controllers" }
            );
        }
    }
}

当我在其上运行路由调试器时,我得到:
(来源:boomerang.com

但是当我尝试发布到 URL“Jobs/Send”时,我得到:

路径“/Jobs/Send”的控制器未找到或未实现 IController。

我已经尝试了如此多的迭代和组合,我的头脑在旋转。有什么想法吗?

谢谢!

【问题讨论】:

    标签: asp.net asp.net-mvc


    【解决方案1】:

    原来 WebAPI 不处理区域!想象一下我的惊喜。所以我找到了一个很棒的帖子http://blogs.infosupport.com/asp-net-mvc-4-rc-getting-webapi-and-areas-to-play-nicely/。现在我正在前进。

    【讨论】:

    • 哇,真不幸。谷歌搜索了一天,终于找到了这个答案。谢谢。
    【解决方案2】:

    除了不支持区域(因为 MapHTTPRoute 没有命名空间支持)之外,API 控制器必须使用 MapHttpRoute,而不是本例中的 MapRoute(删除区域后):

        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
            routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
    
            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional }
                );
    
        }
    

    注意没有{action},Method的不是Action,put取自HTTP请求:Get、Head等……

    【讨论】:

      【解决方案3】:

      我也遇到了同样的问题,解决方法很简单:忘记添加文件_ViewStart.cshtml_Layout.cshtml,可以帮到你

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-26
        • 2021-02-13
        • 2012-12-10
        • 2013-05-31
        • 1970-01-01
        • 2013-08-30
        • 1970-01-01
        相关资源
        最近更新 更多