并非所有路径都返回值。 - 可选退货?

时间:2011-10-20 08:32:36

标签: c# asp.net asp.net-mvc

我收到错误“并非所有路径返回值”,我完全理解为什么。

如您所见,我想重定向此人未登录,显然没有返回视图。

我确定我错了。我该怎么做呢?

    public ActionResult Confirmation (Order Order) {
        if (Session["CompanyID"] == null)
        {
            string url = Request.Url.Host;
            if (Request.Url.Port != null)
            {
                url = url + Request.Url.Port;
            }
            url = url + "/signin.asp";
            Response.Redirect(url);


        }
        else
        {

            int userID = (int)Session["CompanyID"];
            Corp_User User = Repository.CorpUserDetails(userID);

            return View(new OrderLocation { Order = Order, Location = WhygoRepository.RoomDetails(Order.roomId).First(), Corp_User = User });
        }


    }

请注意,我需要重定向到经典的ASP页面,而不是MVC操作..

5 个答案:

答案 0 :(得分:4)

您必须返回ActionResult。使用“RedirectToAction”。

    public ActionResult Confirmation(Order Order)
    {
        if (Session["CompanyID"] == null)
        {
            string url = Request.Url.Host;
            if (Request.Url.Port != null)
            {
                url = url + Request.Url.Port;
            }
            url = url + "/signin.asp";
            return RedirectToAction(<YOUR ACTION>);


        }
        else
        {

            int userID = (int)Session["CompanyID"];
            Corp_User User = Repository.CorpUserDetails(userID);

            return View(new OrderLocation { Order = Order, Location = WhygoRepository.RoomDetails(Order.roomId).First(), Corp_User = User });
        }


    }

答案 1 :(得分:3)

答案 2 :(得分:0)

嗯,实际上这是一个很好的问题。请参阅dknaack在您的特定情况下找到解决方案的答案,但在其他情况下,我们可能不会那么幸运。

从技术上讲,这种情况非常符合逻辑。重定向只是打开一个新请求,并让当前请求很好地处理自己或强制关闭自己。在所有情况下,当前方法都需要返回值。如果Redirect让当前进程处理得很好意味着你应该有一个有意义的返回值。

我认为一种解决方案是在重定向后抛出一个特定的异常。类似的东西:

public string GetCurrentUserName()
{
    if (!authenticated)
    {
        Response.Redirect(LoginScreen);

        throw new UnresolvedMethodException();
    }
    else
    {
        return UserName;
    }
}

返回NULL是一个我不会放钱的选项,因为NULL也可能意味着没有UserName Set(在上面的例子中,用户可能使用他的电子邮件登录,使用户名可选)。

答案 3 :(得分:-2)

只需将return null;放在Response.Redirect(url);下面它永远不会真正到达该位置,但它将摆脱编译器错误。

答案 4 :(得分:-3)

你可以返回null并检查它。

编辑:我想快点,不理我:P