我正在使用URL重写,因此如果用户重新加载页面,他应该登陆他重新加载的相同视图。在某种程度上,我得到了我想要的东西。 我有3个目录Admin和Users以及一个Root。我已经为所有三种情况编写了重写规则。单独地,所有三个都正常工作,即如果我一次使用一个它适用于相应的目录但是如果尝试在其他目录中重新加载页面,则URL保持相同但是呈现的页面来自另一个目录。 对于Instance我在用户目录下打开了一个页面,并且加载的视图是myprofile所以现在如果我首先保留用户目录的规则它将正常工作但在这种情况下假设我在管理员下然后如果我重新加载url将是相同的但呈现的页面将是用户的默认页面,但加载的视图将来自admin。其他情况也是如此。 以下是我的规则
<rule name="Admin Redirect Rule" stopProcessing="true">
<match url="/(Admin)*" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_URI}" pattern="^/(api)" negate="true" />
</conditions>
<action type="Rewrite" url="/Admin/Admin.aspx" />
</rule>
<rule name="User Redirect Rule" stopProcessing="true">
<match url="/(Users)*" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_URI}" pattern="^/(api)" negate="true" />
</conditions>
<action type="Rewrite" url="/Users/User.aspx" />
</rule>
我无法弄清楚我哪里错了。因为两个规则都是正常的。但两者都包括在内。虽然加载的视图是正确的,但渲染的基页正在改变。 以下是我的目录结构
Root
----Users
-----User.aspx
----Admin
-----Admin.aspx
任何帮助将不胜感激。 谢谢!
答案 0 :(得分:0)
在经历了很多天的努力以解决这个问题后仍然无法解决这个问题,但提出了另一种解决方案。分享解决方案。希望它可以帮助其他人。我们的目标是重写网址,以便我们实际登陆我们要求的视图。所以为此我们使用了这种方法,我们为asp.net应用程序提供了Application_BeginRequest
事件/方法。这是在服务器处理每个请求之前执行的。我们可以使用这种方法进行网址重写这是一个简单的例子。
protected void Application_BeginRequest(object sender, EventArgs e)
{
// Get current path
string CurrentPath = Request.Path;
HttpContext MyContext = HttpContext.Current;
Regex regex = new Regex(@"^\/");
Match match = regex.Match(CurrentPath);
// Now we'll try to rewrite URL in form of example format:
// Check if URL needs rewriting, other URLs will be ignored
if (CurrentPath.IndexOf("/Users/") > -1 )
{
// I will use simple string manipulation, but depending
// on your case, you can use regular expressions instead
// Remove / character from start and beginning
// Rewrite URL to use query strings
MyContext.RewritePath("/Users/User.aspx");
}
else if (CurrentPath.IndexOf("/Admin/") > -1)
{
MyContext.RewritePath("/Admin/Admin.aspx");
}
else if (match.Success)
{
MyContext.RewritePath("/Default.aspx");
}
}
因此上面的代码将根据请求的url重写相应的url。与url重写相同。希望它有所帮助。