2015-07-10 78 views
1

我需要一些關於api路由的幫助。有我的代碼:需要幫助關於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 like; http://localhost:55591/Api/TapuParselApi/GetParselNo/MahalleId/146436/AdaNo/80

它意味着MahalleId = 146436和AdaNo = 80。我嘗試了我的ApiController的路由屬性。但是這次Global.asax.cs發生異常。然後嘗試刪除Global.asax.cs中的行;這次API不起作用。我該怎麼辦??有人知道嗎?謝謝...

回答

0

我發現easylier方式的同時也搜索。我希望與所有人分享這種方式;

這很簡單。只需添加您的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路線......謝謝大家......它解決..

0

如果使用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 } 
    ); 
+0

謝謝它的工作 – CoderWho