【发布时间】:2016-04-17 20:10:43
【问题描述】:
第一篇文章在这里。 我在 ASP.Net WebApi 中的默认参数有问题。当我在路由中没有年份和月份的请求时,它使用默认值“0”。但是当我尝试将这个默认值更改为实际日期时,它会保持“0”值。我尝试使用默认参数作为
int? year = null, int? month = null
但也不起作用。
控制器路由前缀
[RoutePrefix("api/Wallets")]
和实际行动
[Route("{id:int}/{year:int?}/{month:int?}")]
[HttpGet]
[ResponseType(typeof(Wallet))]
public async Task<IHttpActionResult> GetWallet(int id, int year = 0, int month = 0)
{
var userId = User.Identity.GetUserId();
Wallet wallet = await db.Wallets.FindAsync(id);
if (wallet == null)
{
return NotFound();
}
if (wallet.UserId != userId)
{
return Unauthorized();
}
if(year == 0)
{
year = DateTime.Now.Year;
}
if(month == 0)
{
month = DateTime.Now.Month;
}
wallet.Expenses = wallet.Expenses.Where(e => e.Date.Month == month && e.Date.Year == year).ToList();
return Ok(wallet);
}
请求是
http://localhost:xxxx/api/Wallets/16
具体来说,只有这个不起作用:
if(year == 0)
{
year = DateTime.Now.Year;
}
if(month == 0)
{
month = DateTime.Now.Month;
}
即使我尝试将年份设置为某个值,它也会保留默认值“0”。 以前是这样工作的,但现在不行了。我做错了吗?
编辑 1
我想通了,那一年和那一个月被锁定在这里,因为它是异步操作并且因为这部分:wallet.Expenses = wallet.Expenses.Where(e => e.Date.Month == month && e.Date.Year == year && e.Id == id).ToList();,但我仍然不明白这种锁定为什么以及如何工作。
【问题讨论】:
-
请同时提供您正在使用的请求,以便我们更好地了解问题可能是什么。
-
帖子已更新。有什么想法吗?
-
但是当我尝试将这个默认值更改为实际日期时。你是怎么做到的?
-
当调试器点击
if(year == 0) { year = DateTime.Now.Year; }其中 DateTime.Now.Year 返回 int 时,“年”不会更新,其值 = 0。 -
找到解决办法了吗?
标签: asp.net-web-api asp.net-mvc-5 asp.net-web-api2 default-parameters