【问题标题】:ASP.NET Core routing to other method than my Name in HttpGet routeASP.NET Core 在 HttpGet 路由中路由到我的名称以外的其他方法
【发布时间】:2018-09-16 13:24:22
【问题描述】:

我的 ASP.NET 核心应用程序中有一个简单的控制器。想法是控制器被称为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 的方式,但这里的逻辑似乎不同。

如何设置正确的网址?

【问题讨论】:

  • 你不能有两个具有相同路由的操作。你也不能在 ASP.NET MVC 中做到这一点,所以不确定你在说什么。

标签: c# asp.net asp.net-core asp.net-core-mvc asp.net-core-2.0


【解决方案1】:

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

api/CreditData/查询

你真正想要的只是:

// 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 属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-15
    • 2014-09-11
    • 2021-01-10
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    相关资源
    最近更新 更多