我正面临一个棘手的情况,我有一个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 }
);
}
答案 0 :(得分:0)
WebApi有一些规则可以将控制器方法(名称,参数)与传入请求进行匹配。 我猜这里WebApi可能需要一个参数来获取ID记录。你正在使用GET,它隐含地需要一个“id”来获取记录。
出于测试目的,请尝试
1)在方法中使用参数。 public IHttpActionResult GetTaskItemsAnon(int id = 1)
2)删除方法的[httpget]指令 并注意与控制器类中的其他方法没有冲突