Routing 为什么';难道这条网络Api路线不受欢迎吗?
因此,在我的WebApi配置中,我添加了一个新路由Routing 为什么';难道这条网络Api路线不受欢迎吗?,routing,asp.net-web-api,Routing,Asp.net Web Api,因此,在我的WebApi配置中,我添加了一个新路由 public static void Register(HttpConfiguration config) { config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RoutePa
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
我一直使用默认的WebAPI路由。我遗漏了什么?我在一个小型测试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 }
);
}
在choise的web服务器中正确注册这些站点,就完成了。
这种方法应该有效。
此外,使用此技术,您可以避免通过两个URL访问多个控制器的情况:
api/someController
和cp/someController
您的应用程序很可能没有正确配置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
动词。我终于弄明白了发生了什么
最初连接WebApi的人从未真正调用过
WebApiConfig.Register(GlobalConfiguration.Configuration)当然,我添加的所有配置都不会影响WebAPI。在中添加该选项修复了问题。在404响应的正文中是否看到任何其他消息?@KiranChalla标准asp.net mvc 404响应。你是说这些都配置正确,应该可以工作吗?我还没有生成一个简化的测试用例,所以我想可能有其他东西干扰了路由-尽管我希望我只是配置了错误的东西。是的..对…路由看起来是正确的,这应该可以工作…BaseApiController
源自ApiController
(不是从Controller
),我想是吧?只是确定一下。我记得有一次我遇到了这样的错误,我只返回了一个状态码。如果你不打算返回任何其他内容,那么你真的应该返回204(无内容)响应。回答很好!!!当您将web api控制器添加到mvc项目时会发生这种情况。它会创建WebApiConfig文件,但不会在global.asax中注册它。而且这个答案也很重要,请确保webapi路由是第一个,否则它不会工作!