WebApi调用404错误

时间:2017-01-05 11:08:23

标签: asp.net-mvc-4 angular asp.net-web-api web-config

我正面临一个棘手的情况,我有一个angular2应用程序部署到服务器都很好,但在向WebApi服务器发出请求调用时,我得到404错误作为响应。 WebApi调用在本地环境中正常工作,但在实时服务器上失败。

<!--Redirect selected traffic to index -->
    <rule name="Index Rule" stopProcessing="true">
      <match url=".*" />
      <conditions logicalGrouping="MatchAll">
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_URI}" matchType="Pattern" pattern="/api/" negate="true" />
      </conditions>
      <action type="Rewrite" url="/index.html" />
    </rule>

以上是我放在Web.config文件中的规则,只有在URL中有“/ api /”时才会调用WebApi服务器。我在控制器中有一个匿名操作,我希望在通过postman运行时调用,但我只是在响应中遇到404错误。

[AllowAnonymous]
    [HttpGet]
    [Route("api/dashboard/getanon")]
    public IHttpActionResult GetTaskItemsAnon()
    {
        var identity = (ClaimsIdentity)User.Identity;
        return this.Content(HttpStatusCode.OK, new { response = "Hello: Anon" });
    }

webapp托管在网络中的子域下。所有angular2文件都正确加载我在火腿上显示登录屏幕,但无法与WebApi控制器进行通信。任何帮助将不胜感激。

更新 下面是WebApiConfig.cs文件

        public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();

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

1 个答案:

答案 0 :(得分:0)

WebApi有一些规则可以将控制器方法(名称,参数)与传入请求进行匹配。 我猜这里WebApi可能需要一个参数来获取ID记录。你正在使用GET,它隐含地需要一个“id”来获取记录。

出于测试目的,请尝试

1)在方法中使用参数。      public IHttpActionResult GetTaskItemsAnon(int id = 1)

2)删除方法的[httpget]指令    并注意与控制器类中的其他方法没有冲突