【问题标题】:How route get method with query params .net core如何使用查询参数.net核心路由获取方法
【发布时间】:2020-03-29 20:51:03
【问题描述】:

我从桌面应用程序调用 web api get 方法。

这是调用方法

private static async Task<Interval> Check(Interval checkGet)
        {
            var queryParams = new Dictionary<string, string>(2);
            queryParams.Add("DateStart", intervalForGet.DateStart.ToString());
            queryParams.Add("DateEnd", intervalForGet.DateEnd.ToString());

            string requestUri = QueryHelpers.AddQueryString("http://localhost:58232/api/Check", queryParams);

            HttpClient client = new HttpClient();

            var httpResponse = await client.GetAsync(requestUri);

            var createdTask = JsonConvert.DeserializeObject<Interval>(await httpResponse.Content.ReadAsStringAsync());    
            return createdTask;
        }

型号

public class Interval
        {
            public int Id { get; set; }
            public DateTime DateStart { get; set; }
            public DateTime DateEnd { get; set; }
        }

当我调试这段代码时,我看到了下一个 requestUri http://localhost:58232/api/Check?DateStart=03.01.2018%200%3A00%3A00&amp;DateEnd=03.01.2018%200%3A00%3A00

这是从 web api 获取方法

[HttpGet("api/Check/{DateStart}/{DateEnd}")]
        public async Task<List<Intervals>> Check([FromQuery]string urlString)
        {
          //some code
        }

这是启动类

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseRouting();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }

告诉我。如何制定路线,因为我的[HttpGet("api/Check/{DateStart}/{DateEnd}")] 不适合我

【问题讨论】:

  • 我认为 Check 方法必须是 [Route("api/Check")] [HttpGet] public void insertRecLoadData(DateTime DateStart, DateTime DateEnd) 让我知道它是否工作正常,我可以像答案一样添加它

标签: c# .net asp.net-core asp.net-web-api


【解决方案1】:

在你的来电者中:

var httpResponse = await client.GetAsync($"http://localhost:58232/api/Check/{intervalForGet.DateStart.ToString()}/{intervalForGet.DateEnd.ToString()}");

在你的 api 中

[HttpGet("api/Check/{DateStart}/{DateEnd}")]
        public async Task<List<Intervals>> Check(DateTime DateStart,DateTime DateEnd)
        {
          //some code
        }

别忘了用正确的格式传递你的日期,比如 2020-11-12

【讨论】:

  • 好的。但是如何将此日期发送到 GetAsync();哪个输入uriI。我将值(DateStart 和 DateEnd)添加到 uri,然后尝试路由
  • @SadeqHatami Fiddler 说 HTTP/1.1 404 Not Found。我发送 http://localhost:58232/api/Check/03.01.2018/03.01.2018 并看到 404 错误(。当我发送 02020-11-12/2020-11-12 相同的错误时
  • @SadeqHatami 我发现问题,在 url http://localhost:58232/api/Check/api/Check/03.01.2018/03.01.2018 它的 url 到方法和 url 到 web api 方法中的错误。但我只想使用/api/Check/。也许你知道怎么做
猜你喜欢
  • 1970-01-01
  • 2018-06-25
  • 2016-11-24
  • 1970-01-01
  • 2018-08-09
  • 1970-01-01
  • 2017-04-22
  • 1970-01-01
  • 2018-05-18
相关资源
最近更新 更多