解决 ASP.NET Web 表单路由和 ScriptResource 问题

问题描述 投票:0回答:1

我正在使用 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")));
        }
c# asp.net webforms url-routing ajaxcontroltoolkit
1个回答
0
投票

嗯,为什么还要麻烦路由呢?

我的意思是,假设我们有一个网页 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 编写的)。

© www.soinside.com 2019 - 2024. All rights reserved.