所以在我的WebApi配置中我添加了一条新路径
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "ControlPanelApi",
routeTemplate: "cp/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
我有控制器
public class SwitchUserController : BaseApiController
{
public HttpResponseMessage Put(int id) {
return Request.CreateResponse(HttpStatusCode.OK);
}
}
然而在chrome:
Request URL:http://localhost:1352/cp/SwitchUser/123
Request Method:PUT
Status Code:404 Not Found
我一直使用默认的web api路由。我错过了什么?
答案 0 :(得分:1)
我在一个小的测试web api项目中尝试了这些路由,一切正常。
但这是我的建议。 尝试在两个不同的项目中拆分您的解决方案。 第一个config.file将有
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
第二个
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "cp/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
在您选择的网络服务器中正确注册这些网站,您就完成了。
这种方法应该有效。
此外,使用这种技术,您可以避免两个URL访问多个控制器的情况:api/someController
和cp/someController
答案 1 :(得分:1)
我终于弄清楚发生了什么。
最初连接WebApi的人从未实际调用WebApiConfig.Register(GlobalConfiguration.Configuration);
,因此我添加的配置当然没有影响Web Api。添加它来解决问题。
答案 2 :(得分:0)
您的应用程序很可能没有正确配置httpHandlers
。尝试将其添加到web.config
:
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,PUT,DELETE" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,PUT,DELETE" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
请注意verb
属性,它应包含PUT
动词。