gpt4 book ai didi

c# - 如何使用属性路由使用自定义路由?

转载 作者:太空宇宙 更新时间:2023-11-03 13:40:46 24 4
gpt4 key购买 nike

我有一堆使用 AttributeRouting 定义的自定义路由。我在 Controller 中有一个函数试图访问/api/GetBatchItems 中的这些 API 函数之一。

GetBatchItems是 Controller APIController的一个函数,类似于:

[RouteArea("api")]
public sealed class APIController : ApiController{
[GET("GetBatches")]
public IEnumerable<PRAT.Models.EF.EFBatchItem> GetBatches() { ... }
}

在另一个 Controller 中,我试图得到结果。直接浏览时,如果我这样做,一切都很好,但我希望能够使用我已经定义的路线,有没有办法做到这一点?我看到有人提到 HttpAttributeRoutingConfiguration 但我在任何地方都找不到那个类。我不想以这种方式使用 MapHttpRoute 方法...

var config = new HttpConfiguration();
config.Routes.MapHttpRoute("default", "api/{controller}/{id}", null);

var server = new HttpServer(config);
var client = new HttpClient(server);

string url = Request.Url.GetLeftPart(UriPartial.Authority) + "/api/APIController/GetBatches";
var result = client.GetAsync(url).Result;
var content = result.Content;
var model = content.ReadAsAsync<IEnumerable<PRAT.Models.EF.EFBatchItem>>().Result;
if (model == null) return View();
else return View(model);

最佳答案

让您的示例代码正常工作

您现有的代码示例需要进行两处更改才能正常工作:

  1. 使 {id} 可选,因为 GetBatches() 没有参数:

    config.Routes.MapHttpRoute("default", "api/{controller}/{id}", new { id = RouteParameter.Optional });
  2. 由于 HttpConfiguration 路由将 {controller} 匹配到名为 {controller}Controller 的类,因此将您的 url 计算更改为:

    string url = Request.Url.GetLeftPart(UriPartial.Authority) + "/api/API/GetBatches";

简化版

您可以使用您现有的路线/api/GetBatches

var client = new HttpClient();

string url = Request.Url.GetLeftPart(UriPartial.Authority) + "/api/GetBatches";
var result = client.GetAsync(url).Result;
var content = result.Content;
var model = content.ReadAsAsync<IEnumerable<MyViewModel>>().Result;
if (model == null) return View();
else return View(model);

更简单(如果您不需要 HTTP)

用这个添加这个扩展类替换你的示例代码:

var model = (new APIController()).GetBatches();
if (model == null) return View();
else return View(model);

关于c# - 如何使用属性路由使用自定义路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17116257/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com