我正在使用 ASP.NET Web 表单,并为我的网站实现了路由。我有一个名为 profile.aspx 的页面,在其中显示用户详细信息。当前的 URL 结构是 http://localhost:56386/profile.aspx?username,但我希望它作为 http://localhost:56386/username 来匹配个人资料页面。
此配置适用于个人资料页面路由,但会导致其他页面出现问题。我在控制台中收到与 ScriptResource.axd 相关的错误,并且我的验证停止工作。
错误:
//VM83:1 未捕获的引用错误:WebForm_DoPostBackWithOptions 未定义
未捕获的语法错误:意外的标记'<' (at WebResource.axd?d= getting this error when going to line number the code is
我已经为此苦苦挣扎了一个月,如果您能提供任何帮助或其他建议来实现所需的结果,我们将不胜感激。
为了实现这一点,我将以下代码添加到 global.asax:
void Application_Start(object sender, EventArgs e)
{
RouteConfig.RegisterRoutes(System.Web.Routing.RouteTable.Routes);
}
并在App_Start文件夹中创建了一个RouteConfig类,如下:
using System;
using System.Web;
using System.Web.Routing;
namespace ASP
{
public static class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.Add("Profile", new Route("{id}", new PageRouteHandler("~/profile.aspx")));
}
}
}
编辑:
添加此行routes.Ignore("{resource}.axd/{*pathInfo}"); RouteConfig 将修复此错误
public static void RegisterRoutes(RouteCollection routes)
{
routes.Ignore("{resource}.axd/{*pathInfo}");
routes.Add("Profile", new Route("{id}", new PageRouteHandler("~/profile.aspx")));
}
嗯,为什么还要麻烦路由呢?
我的意思是,假设我们有一个网页 MyProjects.aspx。
有了友好的 URL,我们就可以得到这个:
MyProjects/QuoteNum/12345
或
MyProjects/InvoiceNum/888834
或者
MyProjects/Quotes/City/New York/InvoiceNum/12345
因此,在上面,网页作业可以是显示给定的项目。因此,通过上述友好的 URL,我们可以拥有我们想要的任何类型的 URL。
请记住,基本页面后面的任何“/”都非常类似于 URL 查询参数。唯一的区别是你不需要像这样那些混乱的 URL 查询参数:
MyProjects.aspx?InvoiceNum='12345'&City = 'New York'
事实上,想要一个使用所谓的友好 URL 的非常好的示例吗?
为什么这当然是关于SO的帖子。看看你这个问题的网址。你看到这个:
https://stackoverflow.com/questions/76869231
因此,您的代码可以执行以下操作来代替使用 URL 查询参数:
Dim fURL As IList(Of String)
fURL = Request.GetFriendlyUrlSegments
If fURL.Count = 2 Then
Dim cUser As clsUser = GetUserInfo()
Select Case fURL(0)
Case "Quote"
' code here to load a quote
If Len(fURL(1)) = 6 AndAlso IsNumeric(fURL(1)) Then
Response.Redirect("~/portal/myprojects")
End If
End If
' code here to load a quote
Case "InvoiceNum"
' Code here to load a quote
End Select
End If
所以,这就像 URL 查询参数一样。 (但是,您不使用 ParseQueryString 或查询字符串,而是使用 GetFriendlyUrlSegments)
在大多数情况下,给定页面将显示诸如项目之类的内容。
因此,您可以拥有美观的 URL,并且用户可以共享 URL。事实上,它们是如此易于阅读并且看起来像最终用户的文件夹路径?然后用户通常会实际输入 URL。 (URL的查询参数很难)。
因此,“/”后面的任何内容都可能是“假”URL。
我想在某些情况下你可以跳转或重新路由到另一个页面,但我发现这种要求相当罕见。
我发现采用上述简单的方法并使用友好的 URL 不仅可以清理您的 URL,而且可以极大地改善用户体验。用户不需要(也看不到).aspx 扩展名,从他们的角度来看,这样的 URL 变得很像文件夹路径。
www.mysite.com/Projects/Quote/1343455
www.mysite.com/Projects/Invoice/134343
因此,在上面,不需要重新路由。因此,目标页面(项目)可以像 URL 的查询参数一样处理额外的值,但如上所示,它们的可读性和简洁性要高得多。如前所述,SO 上的这个非常页面展示了一个很好的例子。 (如果你想知道的话,SO 是用 .net 编写的)。