我想在asp.net中设置URL Masking以隐藏URL中的页面名称和查询字符串。
目前我在下面设置代码以在全局应用程序文件中执行URL重写。
routeCollection.MapPageRoute("Login", "Login", "~/frmLogin.aspx");
但是我想以一种只向最终用户显示域名的方式重写URL。 http://www.domainname.com - 就像这样
请帮我设置。
提前致谢,
答案 0 :(得分:3)
您可以将frmLogin.aspx页面设置为Web服务器中的默认页面。
如果您使用的是IIS 7,则步骤如下:
1.Select your website
2. In description click on default document
3. Add your page (frmLogin.aspx) in and set its priority.
答案 1 :(得分:2)
我们在应用程序中使用以下方法仅在域上显示签名页面。它也可以修改为其他页面。
在Global.asax中:
routeCollection.MapPageRoute("SIGNIN", String.Empty, "~/signin.aspx");
答案 2 :(得分:1)
如果您使用域掩码,那么没有代码更改,您可以获得相同的结果。
答案 3 :(得分:1)
我尝试了以下方法用于实验目的。所以我不知道它会如何在回复的复杂页面上表现。
当您请求www.domainname.com时,实际请求将转至www.domainname.com /default.aspx或您设置的任何其他默认页面。在默认页面加载中,第一件事是检查名为'pagetoview'的任何会话,如果已设置,则server.transfer到该页面,否则服务器默认页面。
现在假设用户从页面转到form.aspx'。 form.aspx load方法应检查pagetoview会话变量,如果它与当前页面名称相同,则取消设置并继续将pagetoview变量设置为当前页面名称并重定向到域。
将检查默认页面并发生server.transfer。希望你能用这种奇怪的方法获得一些观点。
答案 4 :(得分:1)
你应该使用cookie和用户控件来模拟asp.net路由。 所以我们只有一个名为default.aspx的aspx文件,其他页面应该放在用户控件中。 将此脚本放在default.aspx:
的末尾<script src="https://code.jquery.com/jquery-2.2.0.min.js" type="text/javascript"></script>
<script>
$(document).ready(function () {
$("a").click(function (e) {
e.preventDefault();
var attrHref = $(this).attr("href");
$.getJSON("/service.asmx/SetRouteCookie", { href: attrHref }, function (e) {
window.location.reload();
});
});
});
</script>
此脚本禁用所有链接行为,然后我们手动处理点击事件。 在click事件中,我们通过ajax调用Web服务方法。此服务设置某个cookie来保存当前页面:
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json, XmlSerializeString = false, UseHttpGet = true)]
public void SetRouteCookie()
{
if (HttpContext.Current.Request.QueryString["href"] != null)
{
string href = HttpContext.Current.Request.QueryString["href"];
HttpCookie c = new HttpCookie("CurrentRoute", href);
c.Expires = DateTime.Now.AddHours(1);
HttpContext.Current.Response.Cookies.Add(c);
HttpContext.Current.Response.ContentType = "application/json";
HttpContext.Current.Response.Write("{\"status\":\"ok\"}");
}
}
创建cookie并成功回调后,我们通过javascript重新加载页面。 在默认的Page_Load事件中,我们加载了适当的用户控件:
protected void Page_Load(object sender, EventArgs e)
{
#region process route
if (HttpContext.Current.Request.Cookies["CurrentRoute"] != null)
{
var route = HttpContext.Current.Request.Cookies["CurrentRoute"].Value.ToString();
string pageName = GetPageName(route);
Placeholder1.Controls.Add(LoadControl("/ctrls/" + pageName + ".ascx"));
}
else
{
Placeholder1.Controls.Add(LoadControl("/ctrls/default.ascx"));
}
#endregion
}
public string GetPageName(string href)
{
int index = href.IndexOf("&");
if (index == -1)
return href.Trim('/');
else
{
return href.Substring(0, index).Trim('/');
}
}
我在git上创建了示例代码: HideRoute
答案 5 :(得分:1)
您应该使用Server.Transfer方法 例如,default.aspx中有asp.net按钮 写事件点击这样:
Server.Transfer("/login.aspx?q1=testQuery");
使用此方法您的网址不会更改,在login.aspx中,您可以获得查询字符串