需要有关 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 路由...谢谢大家...它解决了..
我需要一些有关 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 路由...谢谢大家...它解决了..