首页 > 解决方案 > 为什么这个 url 不能匹配 asp.net webapi 中的 Route Temple

问题描述

为什么这个 url( http://localhost:52806/openapi/Icrmorder.TestApi/ ) 可以匹配路由 Temple(openapi/I{controller}.{action}/) 但 url( http://localhost:52806/IRegion.TestApi / ) 没有?

这是 Microsoft.AspNet.WebApi 5.2.4 我有谷歌并尝试所有条件,仍然没有结果,我需要一些帮助,Ths!

1.WebApiConfig.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;

namespace TestRegion
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API 配置和服务

            // Web API 路由
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "openapi/I{controller}.{action}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }
}

2.RegionController.cs

using System.Web.Http;

namespace TestRegion.Controllers
{
    public class RegionController : ApiController
    {
        [HttpGet]
        public IHttpActionResult TestApi()
        {
            return Json( new { value="ceshi" });
        }
    }
}
  1. CrmOrderController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

namespace TestRegion.Controllers
{
    public class CrmOrderController : ApiController
    {
        [HttpGet]
        public IHttpActionResult TestApi()
        {
            return Json(new { value = "ceshi" });
        }
    }
}

结果: 在此处输入图像描述

在此处输入图像描述

标签: routesasp.net-web-api2

解决方案


问题 1 是.您的路由模板中有一个,因此您的配置需要:

<modules runAllManagedModulesForAllRequests="true" />

如果您在 HTTP.SYS(例如:ISIS)上托管并且您还没有。

问题 2可能是 Web API 的限制。我不确定您是否可以在同一个 URL 段中有两个路由参数。理论上应该是可以的,但是我以前从未见过这样的路由模板。

最后,您的路由配置表明它有一个可选的{id}路由参数,该参数甚至不在路由模板中。这不应该影响结果,但是它的配置对审阅者来说毫无意义并且可以说是混乱的。

我会考虑.从您的路线模板中删除 ,并进一步考虑使用更传统的路线模板,其形式更接近{controller}/{action}.

我希望这会有所帮助。


推荐阅读