MVC属性路由和int 0导致404

时间:2018-03-19 20:34:32

标签: c# asp.net-mvc iis asp.net-mvc-routing windows-server-2012

我有一个用于跟踪门票和门票时间的应用程序。

在该应用程序中,我有一个时间控制器,将显示所有输入的时间。

[Authorize]
[RouteArea("Work", AreaPrefix = "")]
[RoutePrefix("Company/{companyId:int}/Client/{clientId:int}/Ticket/{ticketId:int}")]
public class TimeController : Controller
{
    private ApplicationDbContext db = new ApplicationDbContext();

    [Route("Time")]
    public ActionResult Index(int ticketId, int clientId, int companyId)
    {
        if (ticketId == 0)
        {
            var work = db.Time
                .Include(c => c.Ticket)
                .Where(c => c.Ticket.ClientId == clientId)
                .OrderByDescending(c => c.Date)
                .ToList();
            return View(work);
        }
        else
        {
            var work = db.Time
                .Include(c => c.Ticket)
                .Where(c => c.TicketId == ticketId)
                .OrderByDescending(c => c.Date)
                .ToList();
            return View(work);
        }
    }

如果我传递ticketId,它将过滤与该票证相关的所有工作。

http://somedomain.com/Company/1/Client/1/Ticket/1/Time

当我想查看与客户有关的所有工作(不是特定于故障单)时,我将为ticketId传递0,例如:

http://somedomain.com/Company/1/Client/1/Ticket/0/Time

当我在Visual Studio调试器和本地IIS中运行它时,它完美地工作。

当我将其发布到生产服务器时,0将导致找不到404页面。

对于可能是什么原因的任何想法都将不胜感激。

1 个答案:

答案 0 :(得分:0)

现在我觉得自己像个白痴。我发现了问题。

在我的索引视图中,我有一个html.action(ChildActionOnly),它抓住并在顶部显示了票证名称。当ticketId为0时,导致找不到。

我将其更改为:

{{1}}

它的效果与预期一致。