gpt4 book ai didi

c# - ASP.NET Core 路由引擎困惑

转载 作者:太空狗 更新时间:2023-10-30 00:29:30 29 4
gpt4 key购买 nike

我正在尝试创建一个可靠的示例来准确说明 ASP.NET Core 路由引擎的工作原理,我对结果感到惊讶。

此示例背后的前提是访问 Controller 索引页面,然后使用 AJAX 请求加载数据。

我使用 MVC 创建了一个 ASP.Net Core 应用程序。然后我添加了以下 Controller :

namespace WebApplication2.Controllers {
using Microsoft.AspNetCore.Mvc;

public class SearchController : Controller {
public IActionResult Index() {
return View();
}

[HttpGet("{company}")]
public IActionResult Get(string company) {
return Ok($"company: {company}");
}

[HttpGet("{country}/{program}")]
public IActionResult Get(string country, string program) {
return Ok($"country: {country} program: {program}");
}
}
}

我还创建了一个简单的 View ,与带有“搜索页面”字样的索引一起使用,这样您就可以看到它被调用了。

问题是由此创建的路由没有意义。

预期结果

  • /搜索/索引
  • /搜索/{公司}
  • /搜索/{国家}/{程序}

以公司:“Abc”、国家:“Canada”和项目:“Plumbing”为例:

  • /搜索/索引

    产生:“搜索页面”

  • /搜索/Abc

    产生“公司:Abc”

  • /搜索/加拿大/管道

    制作:“国家:加拿大项目:管道”

实际结果

然而,它根本就不是这样工作的。相反,这些是结果:

  • /搜索/索引

产生:“国家:搜索程序:索引”

  • /搜索/Abc

产生:“国家:搜索程序:Abc”

  • /搜索/加拿大/管道

产生:404 未找到

很明显,Index 和 Get string company 的路由是混淆的,它把 Controller name 作为参数。

我可以使用以下代码使其工作,但我认为路由引擎会产生相同的结果:

    public class SearchController : Controller {
public IActionResult Index() {
return View();
}

[HttpGet("[controller]/{company}")]
public IActionResult Get(string company) {
return Ok($"company: {company}");
}

[HttpGet("[controller]/{country}/{program}")]
public IActionResult Get(string country, string program) {
return Ok($"country: {country} program: {program}");
}

我的理解有什么问题吗?必须明确指定 [controller] 似乎很愚蠢。

最佳答案

您混合了常规路由和属性路由,但您不应该这样做。

对于您的原始代码,当您删除 url 中的所有 /Search 时,它将起作用。

要使用 Controller 名称,您需要在您的 mvc Controller 上设置 [Route("[controller]")] 以使您的 url 按预期工作。

[Route("[controller]")]
public class SearchController : Controller
{
[HttpGet("[action]")]
public IActionResult Index()
{
return View();
}

[HttpGet("{company}")]
public IActionResult Get(string company)
{
return Ok($"company: {company}");
}

[HttpGet("{country}/{program}")]
public IActionResult Get(string country, string program)
{
return Ok($"country: {country} program: {program}");
}
}

关于c# - ASP.NET Core 路由引擎困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57930054/

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