我创建了一个非常基本的Web API项目。当我从VS运行应用程序并点击像http://localhost:57401/users/getmessage这样的网址时,我能够得到响应。我在IIS上托管并提供绑定后,我无法点击相同的URL。我收到404错误。我点击的网址是http://testapi.com:6060/users/getmessage,这会得到一个404.如果我点击http://testapi.com:6060/Default.html,我会在没有任何错误的情况下获得该网页。 404错误仅适用于api。这是我用于控制器方法的路由属性:
[Route("users/getmessage/"), HttpGet]
和WebApiConfig.cs就像:
public static void Register(HttpConfiguration config)
{
config.EnableCors();
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings.Add(new RequestHeaderMapping("Accept", "text/html", StringComparison.InvariantCultureIgnoreCase, true, "application/json"));
}
可能有什么不对?我在哪里弄错了?
答案 0 :(得分:1)
这最近发生在我身上,结果证明路线模板妨碍了我。
您现在已经将“api / {controller} / {action} / {id}”作为路线模板。所以当你调试时,你会用“http://localhost:2342/api/users/getmessage”之类的东西来点击它,它会起作用。
在IIS中安装时,使用“API”作为应用程序名称,因此在IIS上,获取服务的URL为“http://localhost/API”。
因此,在IIS上托管时,您需要进行相同的调用 “http://localhost/API/api/users/getmessage”。
您可以通过从路径模板前面删除“api /”来修复它。然后它会像你期望的那样工作。
答案 1 :(得分:-1)
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
请在url route config中添加操作名称。