需要有关Api路由的帮助

时间:2015-07-10 12:16:18

标签: api url routes attributes

我需要一些关于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

我想看到网址; http://localhost:55591/Api/TapuParselApi/GetParselNo/ MahalleId / 146436 /的 AdaNo / 80

表示MahalleId = 146436,AdaNo = 80。我在ApiController上试过了route属性。但这次Global.asax.cs有异常。然后尝试删除Global.asax.cs中的行;这次api无法正常工作。我该怎么办??谁知道?感谢...

2 个答案:

答案 0 :(得分:0)

如果使用web api 2,那么属性路由使这很容易。

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

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

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

答案 1 :(得分:0)

我在搜索时也找到了方便的方式。我希望与所有人分享这种方式;

这很简单。只需添加您的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路线......谢谢大家...它解决了..