gpt4 book ai didi

asp.net - 使用没有 MVC 的路由 : authentication form

转载 作者:行者123 更新时间:2023-12-04 05:22:46 26 4
gpt4 key购买 nike

现在我正在尝试使用 System.Web.Routing。一切都很好,但我不明白如何使表单例份验证与 url 路由(返回 url、重定向等)一起工作。谷歌什么也没说。帮助! :)

UPD:我忘了 - 我不使用 MVC。那就是问题所在。如何在没有 MVC 的情况下使用 rounig 和表单例份验证

UPD2:更多关于我的问题
我想得到什么:使用路由的“mysite.com/content/123”、“mysite.com/login/”等网址。重要的是让登录页面像“常规” ASP.NET 登录表单一样工作(未登录时重定向到安全区域登录,登录时重定向回安全区域)。
这就是我正在做的事情。
Application_Start 上的 global.asax 中,像这样注册路由:

routes.Add("LoginPageRoute", new Route("login/", new CustomRouteHandler("~/login.aspx")));
routes.Add("ContentRoute", new Route("content/{id}", new ContentRoute("~/content.aspx"))
{
Constraints = new RouteValueDictionary {{ "id", @"\d+" }}
});

CustomRouteHandlerContentRoute - 简单的 IRouteHandler 类,就像:...

public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
var page = BuildManager.CreateInstanceFromVirtualPath(VirtualPath, typeof(Page)) as IHttpHandler;
return page;
}

...

一切似乎都很完美:当转到 “/content/10”login.aspx 时,我得到了 content.aspx当转到 “/login/” 时。但是……
当我确保内容安全时(在 web.config 中,使用 deny="?"),登录表单无法正常工作。
现在我无法访问 “/content/10” 页面:

0.我正在浏览器中输入“/content/10”
1.网站重定向到“/login/?ReturnUrl=%2fcontent%2f10”。 (嗯……似乎所有的问题都从这里开始,对吧?:)
2.我正在尝试登录。无论我输入什么凭据...
3. …网站将我重定向到 “login?ReturnUrl=%2fContent%2f10”(蓝屏错误 - 访问被拒绝。 code> 说明:访问服务该请求所需的资源时发生错误。服务器可能未配置为访问所请求的 URL。)
所以,问题是如何让 ASP.NET 理解真正的 ReturnUrl 并在登录后提供重定向。

最佳答案

这些步骤应该允许您实现所需的行为。
总结一下:

  1. 您使用的是路由,而不是 MVC。我的示例将映射一个 URL,如 http://host/Mysite/userid/12345http://host/Mysite/Pages/users.aspx?userid=12345 上的真实页面上.
  2. 您希望控制对这些地址的访问,要求用户登录。我的示例有一个页面 http://host/Mysite/login.aspx使用标准登录控件,并且该站点被配置为使用表单例份验证。

步骤 1

我已经使用 Pages 文件夹中的这个 web.config “隐藏”了 Pages 文件夹的内容:

  <?xml version="1.0"?>
<configuration>
<system.web>
<httpHandlers>
<add path="*" verb="*"
type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>
<pages validateRequest="false">
</pages>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<handlers>
<remove name="BlockViewHandler"/>
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler"/>
</handlers>
</system.webServer>
</configuration>

这样可以确保如果有人使用像 http://host/Mysite/Pages/users.aspx?userid=12345 这样的 url ,然后他们会收到标准的 404 响应。

第二步

我的顶级 web.config 文件包含(以及所有标准的东西)这个位置元素:

  <location path="userid">
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>

这可以防止匿名访问 http://host/Mysite/userid/12345 形式的 URL。这意味着用户将被自动重定向到 login.aspx,然后如果他们提供有效的凭据,他们将被重定向到正确的位置。

第三步

这里是我的 global.asax 供引用:

<script RunAt="server">

void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
RegisterRoutes(RouteTable.Routes);
}

public static void RegisterRoutes(RouteCollection routes)
{
routes.RouteExistingFiles = true;
routes.Add("UseridRoute", new Route
(
"userid/{userid}",
new CustomRouteHandler("~/Pages/users.aspx")
));
}

</script>

这是我的路由处理程序:

using System.Web.Compilation;
using System.Web.UI;
using System.Web;
using System.Web.Routing;
using System.Security;
using System.Web.Security;


public interface IRoutablePage
{
RequestContext RequestContext { set; }
}

public class CustomRouteHandler : IRouteHandler
{
public CustomRouteHandler(string virtualPath)
{
this.VirtualPath = virtualPath;
}

public string VirtualPath { get; private set; }

public IHttpHandler GetHttpHandler(RequestContext
requestContext)
{
var page = BuildManager.CreateInstanceFromVirtualPath
(VirtualPath, typeof(Page)) as IHttpHandler;

if (page != null)
{
var routablePage = page as IRoutablePage;

if (routablePage != null) routablePage.RequestContext = requestContext;
}

return page;
}
}

关于asp.net - 使用没有 MVC 的路由 : authentication form,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/405394/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com