ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c#-ASP.NET Core路由到HttpGet路由中我的名字以外的其他方法

2019-11-09 05:09:33  阅读:600  来源: 互联网

标签:asp-net-core asp-net-core-mvc asp-net-core-2-0 asp-net c


我的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的方式,但是这里的逻辑似乎有所不同.

如何设置正确的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以表明它是路由的静态部分.在这种情况下,由于我上面提到的规则,将从路由中填充您的查询参数.

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

标签:asp-net-core,asp-net-core-mvc,asp-net-core-2-0,asp-net,c
来源: https://codeday.me/bug/20191109/2011799.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有