ASP.NET MVC WebAPI 404错误如何解决?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

我有一个运行在v4.0集成模式下的asp.net web窗体应用程序。

我试图在App_Code文件夹中添加一个apicontroller。

在Global.asax中,我添加了下面的代码

 RouteTable.Routes.MapHttpRoute(
      name: "DefaultApi",
      routeTemplate: "api/{controller}/{id}",
      defaults: new { id = System.Web.Http.RouteParameter.Optional }
 );

当我尝试导航到控制器时http://localhost/api/Value,出现404错误。

无扩展url在处理程序部分配置。我为网站启用了表单和匿名身份验证。

ExtensionLess网址已配置为“*”。

当我点击控制器的URL时,请求由StaticHandler而不是ExtensionlessUrlHandler-Integrated-4.0处理。

现在我不知道为什么系统会抛出如下图所示的错误。

提问于
用户回答回答于

问题在于你的路由配置。Mvc路由不同于WebApi路由。

添加参考System.Web.Http.dllSystem.Web.Http.Webhost.dllSystem.Net.Http.dll然后配置你的API路由如下:

   GlobalConfiguration.Configuration.Routes.MapHttpRoute(
     name: "DefaultApi",
     routeTemplate: "api/{controller}/{id}",
     defaults: new { id = System.Web.Http.RouteParameter.Optional }
   );
用户回答回答于

我遇到了这个问题。

我试着编辑我的文章,WebApiConfig.cs以满足这里的许多建议,并在其他地方编码。一些人工作,但没有解释为什么路线不能正常工作时WebApiConfig.cs编码完全按照MS模板WebApi项目。

我的实际问题是,在手动添加WebApi到我的项目中时,我没有按照配置调用的库存顺序Global.asax

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        // This is where it "should" be
        GlobalConfiguration.Configure(WebApiConfig.Register);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        // The WebApi routes cannot be initialized here.
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }

我可以猜出这是为什么,但我没有进一步调查。至少可以说是不直观的。

扫码关注云+社区