带或不带“/”的 MVC3 uri显示不同的反应

发布于 2024-11-13 22:37:20 字数 529 浏览 4 评论 0原文

这两条路径有什么区别?

http://www.mydomain.com/testmvc3
http://www.mydomain.com/testmvc3/

我将代码放在 HomeController 中:

// GET: /Home/
public ActionResult Index()
{
    if (Request.IsAuthenticated)
    {
        return RedirectToAction("Index", "Member");
    }
    else
    {
        return View();
    }
}

但只有第二个链接工作正常,但第一个链接仍然显示主页。(即使已通过身份验证)如何使它们具有相同的反应?

What is difference between these two paths?

http://www.mydomain.com/testmvc3
http://www.mydomain.com/testmvc3/

I put the code in HomeController:

// GET: /Home/
public ActionResult Index()
{
    if (Request.IsAuthenticated)
    {
        return RedirectToAction("Index", "Member");
    }
    else
    {
        return View();
    }
}

But only the second link works fine, but the first one still show the Home page.(even it is authenticated) How to make them have the same react?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

执手闯天涯 2024-11-20 22:37:20

我发现问题是由页面缓存引起的。为了避免这个问题,我将代码修改为:

[OutputCache(Duration = 30, VaryByCustom = "Request.IsAuthenticated")]
public ActionResult Index()
{
    if (Request.IsAuthenticated)
    {
        return RedirectToAction("Index", "Member");
    }
    else
    {
        return View();
    }
}

现在它可以工作了。

I found the problem, it was caused by the page cache. To avoid the problem, I modify the code to:

[OutputCache(Duration = 30, VaryByCustom = "Request.IsAuthenticated")]
public ActionResult Index()
{
    if (Request.IsAuthenticated)
    {
        return RedirectToAction("Index", "Member");
    }
    else
    {
        return View();
    }
}

Now it works.

隔纱相望 2024-11-20 22:37:20

您需要将尾部斜杠保留在正常路由之外,否则表明可能有 url 参数进入操作。

要强制执行此操作,您可能需要检查 MvcCms 中的 cleanurl 过滤器。 源代码

    private bool IsTrailingSlashDirty(ref string path)
    {
        //we only want a trailing slash on the homepage
        if (path.EndsWith("/") && !path.Equals("/"))
        {
            path = path.TrimEnd(new char[] { '/', '/' });
            return true;
        }
        return false;
    }

You will want to leave the trailing slash off of a normal route, otherwise it indicates that there may be url parameters coming into the action.

To enforce this you might want to check out the cleanurl filter that is in MvcCms. Source Code

    private bool IsTrailingSlashDirty(ref string path)
    {
        //we only want a trailing slash on the homepage
        if (path.EndsWith("/") && !path.Equals("/"))
        {
            path = path.TrimEnd(new char[] { '/', '/' });
            return true;
        }
        return false;
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文