需要有关 Api 路由的帮助

Need Help About Api Routing

我需要一些有关 api 路由的帮助。有我的代码:

WebApiConfig.cs;

public static void Register(HttpConfiguration config)
    {
        // Web API routes
        config.MapHttpAttributeRoutes();

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


    }

RouteConfig.cs;

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");            

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );


        routes.MapRoute(
            name:"UserControl",
            url:"{controller}/"
            );
    }

Global.asax.cs;

 GlobalConfiguration.Configure(WebApiConfig.Register);

这是我的 api;

 public object GetParselNo(int id, int no)
    {
        List<TapuParselModel> parselList = TapuModule.GetParselListFromMahalleAndAdaTapuKod(id, no.ToString());

        List<string> parselNoList = parselList.Select(x => x.ParselNo).ToList<string>();
        parselNoList = parselNoList.OrderBy(x => x, new AlphanumComparator()).ToList();

        var jsonResult = SConvert.SerializeJSON(parselNoList);

        return jsonResult;


    }

现在是这样的。但是 api url 是; http://localhost:55591/Api/TapuParselApi/GetParselNo/146436/80

我想看到 URL 喜欢; http://localhost:55591/Api/TapuParselApi/GetParselNo/MahalleId/146436/AdaNo/80

表示MahalleId=146436,AdaNo=80。我在我的 ApiController 上尝试了路由属性。但是这次 Global.asax.cs 异常。然后尝试删除 Global.asax.cs 中的行;这次 api 不工作。我应该怎么办??有人知道吗?谢谢...

如果使用 web api 2,则属性路由使这变得非常容易。

[Route("Api/TapuParselApi/GetParselNo/MahalleId/{id}/AdaNo/{no}")]
public object GetParselNo(int id, int no) { ... }

如果没有,您可以将此路由添加到您的网络 api 默认路由之前的路由配置中:

    config.Routes.MapHttpRoute(
        name: "GetParselNo",
        routeTemplate: "api/TapuParselApi/GetParselNo/MahalleId/{id}/AdaNo/{no}",
        defaults: new { id = RouteParameter.Optional, no = RouteParameter.Optional }
    );

我在搜索时也找到了更简单的方法。我想以这种方式与所有人分享;

就这么简单。只需添加您的 Web.config

<handlers>
  **<remove name="WebDAV" />
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />**
</handlers>

所以你不需要改变你的 wep api 路由...谢谢大家...它解决了..