gpt4 book ai didi

c# - ASP.NET Core 路由到 HttpGet 路由中除我的 Name 之外的其他方法

转载 作者:行者123 更新时间:2023-12-03 00:56:14 24 4
gpt4 key购买 nike

我的 ASP.NET Core 应用程序中有一个简单的 Controller 。想法是, Controller 名为 CreditData,而我的端点可以是 /api/creditdata/,然后它应该具有默认的预期 API 方法。

我想要两种方法:

  • /api/creditdata 并且它应该有一个查询,例如 /api/creditdata?query=text1,text2
  • /api/creditdata/value 其中 /api/creditdata/text1 等查询应该起作用

我尝试将其设置如下:

   [Route("api/[controller]")]
public class CreditDataController : Controller
{
private CreditDataService _creditDataService;
public CreditDataController()
{
_creditDataService = new CreditDataService();
}

// GET: api/CreditData?query=text1,text2
[HttpGet("{query}", Name = "Get")]
public List<CreditData> Get([FromQuery] string query)
{
// code
}

// GET: api/CreditData/GetByRegistration/33514322
[HttpGet("{query}", Name= "GetByRegistration")]
public CreditData GetByRegistration(string query)
{
// code
}


}

我有一个非常标准的 Startup.cs 文件:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions
{
HotModuleReplacement = true,
ReactHotModuleReplacement = true
});
}
else
{
app.UseExceptionHandler("/Home/Error");
}

app.UseStaticFiles();

app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");

routes.MapSpaFallbackRoute(
name: "spa-fallback",
defaults: new { controller = "Home", action = "Index" });
});
}

但两者都无法按照我想要的方式工作。我习惯了 ASP.NET MVC 4/5 方式,但这里的逻辑似乎不同。

如何设置正确的 URL?

最佳答案

使用[HttpGet("{query}", Name = "Get")],您声明 URL 必须类似于:

api/CreditData/query

你真正想要的只是:

// GET: api/CreditData?query=text1,text2
[HttpGet(Name = "Get")]
public List<CreditData> Get([FromQuery] string query)

HttpGet 属性中提供 {query} 指定它必须是路由的一部分,这不是您想要的,因此我将其删除。

您的第二个[HttpGet]用于完全相同的路线。为此,您需要:

// GET: api/CreditData/GetByRegistration/33514322
[HttpGet("GetByRegistration/{query}", Name= "GetByRegistration")]
public CreditData GetByRegistration(string query)

在这里,我添加了 GetByRegistration 以表明它是路线的静态部分。在这种情况下,根据我上面提到的规则,您的 query 参数将从路由中填充。

注意:除非您在其他地方按名称引用路由,否则不需要 Name 属性。

关于c# - ASP.NET Core 路由到 HttpGet 路由中除我的 Name 之外的其他方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49694089/

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