因此,在我的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);
}
}然而,在铬中:
Request URL:http://localhost:1352/cp/SwitchUser/123
Request Method:PUT
Status Code:404 Not Found我一直使用默认的web路由。我遗漏了什么?
发布于 2013-10-05 23:01:42
我终于弄明白了到底是怎么回事。
最初连接WebApi的人从未真正调用过WebApiConfig.Register(GlobalConfiguration.Configuration);,因此,当然,我添加的任何配置都不会影响WebApi。把它加到解决问题上。
发布于 2013-09-27 08:02:38
我在一个小型的测试web项目中尝试了这些路线,一切都很好。
但这是我的建议。尝试将解决方案分成两个不同的项目。第一个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 }
);
}正确注册这些网站在你的网站服务器的选择,你就完成了。这一办法应能奏效。此外,使用这种技术,您可以避免两个urls可以访问多个控制器的情况:api/someController和cp/someController
发布于 2013-09-30 11:22:37
很可能您没有为您的应用程序正确配置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谓词。
https://stackoverflow.com/questions/18882946
复制相似问题