2017-01-05 59 views
0

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

<!--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> 

以上是我已经放置在如果在URL“/ API /”中的WebAPI服务器将只被调用的Web.config文件中的规则。我在控制器中有一个匿名行为,我希望在通过邮递员运行时调用它,但是我只是得到一个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控制器进行通信。任何帮助将不胜感激thanx。

UPDATE: 下面是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

您可以发布邮差的快照你如何进行API调用?另外,你可以尝试从Action方法中删除[AllowAnonymous]属性并尝试吗? –

+0

我已经删除了[AllowAnonymous],但没有任何更改。对于Postman,我只是使用正常的GET请求,而没有参数给适当的URL。我知道这是正确的邮递员,因为在本地主机环境下邮差成功地到达控制器中的WebApi行动。 – Rossco

+0

你可以在你的RouteConfig.cs中发布代码吗? –

回答

0

的WebAPI有一定的规则,分别匹配传入请求控制器方法(名称,参数)。 我想这里WebApi可能期望一个参数用于通过ID获取记录。您正在使用GET,它隐含需要一个“id”来获取记录。

出于测试目的,尝试

1)在你的方法使用的参数。 公共IHttpActionResult GetTaskItemsAnon(INT ID = 1)

2)删除了你的方法 的[HTTPGET]指令和照顾有在你的控制器类的其他方法没有冲突