4

所以在我的 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 路由。我错过了什么?

4

3 回答 3

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 }
    );
}

在您选择的 Web 服务器中正确注册这些站点,您就完成了。这种方法应该有效。此外,使用这种技术,您可以避免两个 url 可以访问多个控制器的情况:api/someControllercp/someController

于 2013-09-27T08:02:38.057 回答
1

我终于弄清楚发生了什么。

最初连接 WebApi 的人从未真正调用过WebApiConfig.Register(GlobalConfiguration.Configuration);,所以我添加的任何配置当然都不会影响 Web Api。添加它解决了这个问题。

于 2013-10-05T23:01:42.347 回答
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动词。

于 2013-09-30T11:22:37.583 回答