Routing 为什么';难道这条网络Api路线不受欢迎吗?

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

因此,在我的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

我一直使用默认的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)在404响应的正文中是否看到任何其他消息?@KiranChalla标准asp.net mvc 404响应。你是说这些都配置正确,应该可以工作吗?我还没有生成一个简化的测试用例,所以我想可能有其他东西干扰了路由-尽管我希望我只是配置了错误的东西。是的..对…路由看起来是正确的,这应该可以工作…
BaseApiController
源自
ApiController
(不是从
Controller
),我想是吧?只是确定一下。我记得有一次我遇到了这样的错误,我只返回了一个状态码。如果你不打算返回任何其他内容,那么你真的应该返回204(无内容)响应。回答很好!!!当您将web api控制器添加到mvc项目时会发生这种情况。它会创建WebApiConfig文件,但不会在global.asax中注册它。而且这个答案也很重要,请确保webapi路由是第一个,否则它不会工作!