C# .NETWebAPI路由和;帮助页
我正在努力让API帮助页面显示我的所有API端点,并以我想要的样式显示它们 以下是我的路线:C# .NETWebAPI路由和;帮助页,c#,.net,asp.net-mvc,asp.net-web-api,asp.net-web-api-routing,C#,.net,Asp.net Mvc,Asp.net Web Api,Asp.net Web Api Routing,我正在努力让API帮助页面显示我的所有API端点,并以我想要的样式显示它们 以下是我的路线: config.Routes.MapHttpRoute("Orgs", "v1/Orgs/{orgId}", new { controller = "Orgs", orgId = RouteParameter.Optional }); config.Routes.MapHttpRoute("OrgDescendants", "v1/Orgs/{orgId}/Descendants", new { c
config.Routes.MapHttpRoute("Orgs", "v1/Orgs/{orgId}",
new { controller = "Orgs", orgId = RouteParameter.Optional });
config.Routes.MapHttpRoute("OrgDescendants", "v1/Orgs/{orgId}/Descendants",
new { controller = "Orgs", action = "OrgDescendants" });
以下是我的所有控制器方法:
[HttpGet]
public IEnumerable<Org> GetAllOrgs()
[HttpGet]
public Org Get(string orgId)
[HttpGet]
[ActionName("OrgDescendants")]
public List<Org> Descendants(string orgId)
[HttpPost]
public HttpResponseMessage Post(Org org)
[HttpPut]
public HttpResponseMessage Put(string orgId, Org org)
[HttpDelete]
public void Delete(string orgId)
如您所见,帮助页面缺少以下端点:
GET v1/Orgs/{orgId}
我尝试了太多不同的路由排列,但我都忘了。无论我尝试什么,我总是以一些端点丢失或“格式不正确”而告终
例如,我最终得到:
GET v1/Orgs/{orgId}/Get
PUT v1/Orgs?orgId={orgId}
当我想要的时候:
GET v1/Orgs/{orgId}
PUT v1/Orgs/{orgId}
或者我最终会:
GET v1/Orgs/{orgId}/Get
PUT v1/Orgs?orgId={orgId}
当我想要的时候:
GET v1/Orgs/{orgId}
PUT v1/Orgs/{orgId}
无论我尝试什么组合,我似乎都无法按照我想要的方式得到它们。任何帮助都将不胜感激 通常,当项目架构(层次结构)出现问题时,会遇到此类问题 此外,您可以尝试以不同的方式添加路由器。例如:
RouteTable.Routes.Add(
"UserProfiles",
new Route("Profile/{uid}/{mode}", new ProfileRouterHandler("~/Profile/Default.aspx")));
路由器处理程序看起来像:
public class ProfileRouterHandler: IRouteHandler
{
private string VirtualPath { get; set; }
public ProfileRouterHandler()
{
}
public ProfileRouterHandler(string virtualPath)
{
VirtualPath = virtualPath;
}
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
string param = requestContext.RouteData.Values["uid"] as string;
string mode = requestContext.RouteData.Values["mode"] as string;
long id;
long.TryParse(param, out id);
if (id > 0)
{
string filePath = "~/Profile/Default.aspx?uid=" + param + (!string.IsNullOrEmpty(mode) ? "&mode=" + mode : "");
VirtualPath = "~/Profile/Default.aspx";
HttpContext.Current.RewritePath(filePath);
}
else
{
string filePath = "~/Profile/" + param + ".aspx";
VirtualPath = filePath;
HttpContext.Current.RewritePath(filePath);
}
return BuildManager.CreateInstanceFromVirtualPath(VirtualPath, typeof(Page)) as Page;
}
}
希望这会有所帮助。我猜HelpPage认为路径
GET v1/Orgs/{orgId}
在GET(string-orgId)
和子体(string-orgId)
之间存在冲突。实际上,您可能会尝试发出请求以获取v1/Orgs/{orgId},并会看到一个错误,比如说“找到了多个操作…”等等。当我这样定义嵌套路由时,我通常会将嵌套资源设置为不同的控制器,在您的情况下,它将是后代控制器
。这样,如果需要,还可以在子体上使用完整的RESTAPI。也许这是一个你可以探索的解决方法…我一直在考虑将子代移动到他们自己的控制器,但因为它们也是Org,所以我想将它们保留在同一个控制器中,以节省重复的代码。看起来这可能是目前最好的解决办法。我会试试看它是否有效。