Asp.net web api 无法理解为什么具有2个日期参数的控制器方法不起作用
我有一个非常奇怪和令人沮丧的问题 我有一个带有标准Web Api控制器的控制器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
[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;
}