Asp.net web api 无法理解为什么具有2个日期参数的控制器方法不起作用

Asp.net web api 无法理解为什么具有2个日期参数的控制器方法不起作用,asp.net-web-api,model-view-controller,asp.net-mvc-5,asp.net-web-api2,Asp.net Web Api,Model View Controller,Asp.net Mvc 5,Asp.net Web Api2,我有一个非常奇怪和令人沮丧的问题 我有一个带有标准Web Api控制器的控制器 [Route("Gateway/[Controller]/[action]")] public class MyController: Controller { public MyController() { } [ActionName("MyMethod")] [System.Web.Http.HttpGet] public async Task<IActio

我有一个非常奇怪和令人沮丧的问题

我有一个带有标准Web Api控制器的控制器

[Route("Gateway/[Controller]/[action]")]
public class MyController: Controller
{
    public MyController()
    {
    }

    [ActionName("MyMethod")]
    [System.Web.Http.HttpGet]
    public async Task<IActionResult> MyMethodAsync(int numberParam, DateTime? startDate, DateTime? endDate)
    {

        var parameters = $"numberParam={numberParam}";
        if (startDate != null)
        {
            parameters += $"&startDate={startDate.Value:O}";
        }

        if (endDate != null)
        {
            parameters += $"&endDate={endDate.Value:O}";
        }

//My logic here - not relevant for question

        return result;
    }
}
endDate以空值显示

为什么会这样

没有错误,我不知道为什么忽略第二个参数

这适用于任何日期格式

我不需要时间

这在使用完整url时发生,例如

我也通过一个HttpClient调用它,它也不起作用

private static async Task<string> ProcessResponseAsync(HttpResponseMessage response)
{
    var responseText = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

    if (response.StatusCode == System.Net.HttpStatusCode.OK)
    {
        return responseText;
    }

    return "Error: " + response.StatusCode + " Content: " + responseText;
}

 private static string GetUrl(string area, string method, string parameters)
 {
   if (!string.IsNullOrEmpty(parameters))
   {
     if (parameters[0] != '?')
     {
       parameters = $"?{parameters}";
     }
   }

   var address = ConfigurationManager.AppSettings["GatewayUrl"];
   var result = $"{address}/{area}/{method}{parameters}";            
   return result;
}

protected async Task<string> ExecuteRequestAsync(string area, string method, string parameters)
{                        
   var url = GetUrl(area, method, parameters);            
   var response = await _httpClient.GetAsync(url).ConfigureAwait(false);
   var result = await ProcessResponseAsync(response).ConfigureAwait(false);

   return result;
}
专用静态异步任务ProcessResponseAsync(HttpResponseMessage响应)
{
var responseText=await response.Content.ReadAsStringAsync().ConfigureAwait(false);
if(response.StatusCode==System.Net.HttpStatusCode.OK)
{
返回响应文本;
}
返回“错误:+response.StatusCode+”内容:+responseText;
}
私有静态字符串GetUrl(字符串区域、字符串方法、字符串参数)
{
如果(!string.IsNullOrEmpty(参数))
{
如果(参数[0]!='?')
{
参数=$“?{parameters}”;
}
}
var address=ConfigurationManager.AppSettings[“网关URL”];
var result=$“{address}/{area}/{method}{parameters}”;
返回结果;
}
受保护的异步任务ExecuteRequestAsync(字符串区域、字符串方法、字符串参数)
{                        
var url=GetUrl(区域、方法、参数);
var response=await\u httpClient.GetAsync(url).ConfigureAwait(false);
var result=await ProcessResponseAsync(response).ConfigureAwait(false);
返回结果;
}

Paul

通过将“/”替换为“-”来创建不带特殊字符“/”的url ?数字参数=1,起始日期=2018年1月1日,结束日期=2018年1月31日

或 将特殊字符编码为


能否显示调用此方法的代码?使用Ajax或Action?请参阅描述您是否可以尝试将2018年1月31日更改为不同的值?例如:2018年2月2日。尝试使用不同的起始日期。然后检查startDate是否包含值为2月1日还是1月2日?谢谢,我还需要将日期传递为yyyy mm dd,因为英国日期被视为美国日期
private static async Task<string> ProcessResponseAsync(HttpResponseMessage response)
{
    var responseText = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

    if (response.StatusCode == System.Net.HttpStatusCode.OK)
    {
        return responseText;
    }

    return "Error: " + response.StatusCode + " Content: " + responseText;
}

 private static string GetUrl(string area, string method, string parameters)
 {
   if (!string.IsNullOrEmpty(parameters))
   {
     if (parameters[0] != '?')
     {
       parameters = $"?{parameters}";
     }
   }

   var address = ConfigurationManager.AppSettings["GatewayUrl"];
   var result = $"{address}/{area}/{method}{parameters}";            
   return result;
}

protected async Task<string> ExecuteRequestAsync(string area, string method, string parameters)
{                        
   var url = GetUrl(area, method, parameters);            
   var response = await _httpClient.GetAsync(url).ConfigureAwait(false);
   var result = await ProcessResponseAsync(response).ConfigureAwait(false);

   return result;
}