首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ASP.NET MVC WebAPI 404错误

ASP.NET MVC WebAPI 404错误
EN

Stack Overflow用户
提问于 2013-12-17 06:01:20
回答 16查看 93.3K关注 0票数 62

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

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

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

代码语言:javascript
复制
 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配置为‘*’

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

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

EN

回答 16

Stack Overflow用户

发布于 2014-10-03 09:19:17

我正在经历这个问题。

我尝试编辑我的WebApiConfig.cs,以满足这里的一些建议和其他地方的代码示例。有些工作了,但它没有解释为什么当WebApiConfig.cs完全按照MS模板WebApi项目编码时,路由不能工作。

我的实际问题是,在手动将WebApi添加到项目中时,我没有遵循来自Global.asax的配置调用的常用顺序

代码语言:javascript
复制
    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);
    }

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

票数 114
EN

Stack Overflow用户

发布于 2013-12-31 05:01:19

问题出在您的路由配置中。Mvc路由不同于WebApi路由。

添加对System.Web.Http.dllSystem.Web.Http.Webhost.dllSystem.Net.Http.dll的引用,配置您的接口路由,如下所示:

代码语言:javascript
复制
   GlobalConfiguration.Configuration.Routes.MapHttpRoute(
     name: "DefaultApi",
     routeTemplate: "api/{controller}/{id}",
     defaults: new { id = System.Web.Http.RouteParameter.Optional }
   );
票数 32
EN

Stack Overflow用户

发布于 2014-01-02 02:10:20

请确保以下事项

1.)如果您的web api是4.5,请确保已使用.NET 4.5或4.0配置了IIS。在IIS中安装4.5

使用管理员权限在命令提示符下运行此命令

代码语言:javascript
复制
C:\Windows\Microsoft.NET\Framework\v4.0.30319>aspnet_regiis.exe -i

2.)将您的路由更改为

代码语言:javascript
复制
RouteTable.Routes.MapHttpRoute(
      name: "DefaultApi",
      routeTemplate: "{controller}/{id}",
      defaults: new { id = System.Web.Http.RouteParameter.Optional }
 );

并使用Demo/Get发出请求(其中demo是您的控制器名称)

如果%1、%2不工作,请尝试%3

3.)在web.config文件中添加以下配置

代码语言:javascript
复制
<system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />

</system.webServer>
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20621825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档