rewritepath
我最近在asp.net 4.0的global.asx页面中使用了HttpContext.RewritePath。 URL重写工作正常,但是当我尝试提交表单时,我得到了警告,但出现错误404。我意识到表单的action属性未指向正确的url(RewritePath方法最常见的问题)。 因此我想出了以下解决方法。 希望这可以帮助遇到相同问题的人。
我的第一个解决方法是...创建一个找到当前页面(包括querystring)的方法。 找到页面后,将其粘贴到表单操作中。 您可以为此使用页面PreRender事件。 例
'''<摘要>
'''获取此页面名称
'''</ summary>
'''<returns>当前工作页面网址</ returns>
受保护的函数GetCurrentUrl(ByVal,包括Qstring作为布尔值)作为字符串
Dim Url As String = String.Empty
如果HttpContext.Current无效
返回网址
万一
如果包括Qstring然后
昏暗的主机作为字符串= ResolveHost(False)
如果host.EndsWith(“ /”)然后
host = host.Substring(0,host.Length-1)
万一
网址=主机+ HttpContext.Current.Request.RawUrl
其他
网址= HttpContext.Current.Request.Url.GetLeftPart(UriPar tial.Path)
万一
返回网址
结束功能
'''<摘要>
'''解析主机位置
'''</ summary>
'''<param name =“ secured”>使用安全套接字层; 正确/错误</ param>
'''<returns>商店主机位置</ returns>
受保护的函数ResolveHost(ByVal安全为布尔值)为字符串
Dim retval As String =“ http://”&ServerVariables(“ HTTP_HOST”)
Dim prefx =“ http:// www。”
如果不检索包含(www)然后
如果不是HttpContext.Current.Request.Url.IsLoopback然后
retval = retval.Replace(“ http://”,prefx)
安全=假
万一
万一
如果安全的话
如果不是OwnSSL然后
retval =共享的SSL
其他
retval = retval.Replace(“ http:/”,“ https:/”)
万一
其他
retval = retval.Replace(“ www.www”,“ www”)
如果不是retval.EndsWith(“ /”)然后
retval = retval&“ /”
万一
返程
结束功能
现在我们有了此功能,在页面预渲染中添加以下内容:
受保护的重写Sub OnPreRender(ByVal e作为EventArgs)
form1.Action = Me.GetCurrentUrl(True)
MyBase.OnPreRender(e)
结束子
这是第一个解决方法!
解决方法2:
首先,我们需要创建一个自HtmlForm类继承的自定义表单
命名空间RewriteFormWorkaround
公共类MyCustomForm
继承System.Web.UI.HtmlControls.HtmlForm
受保护的重写Sub RenderAttributes(ByVal writer作为HtmlTextWriter)
Attributes.Add(“ action”,GetCurrentUrl(True))
Attributes.Add(“ id”,“ myform”)
Attributes.Add(“ method”,“ Post”)
Attributes.Render(writer)
结束子
结束命名空间
将以下指令添加到您的页面:
<%@ Register TagPrefix =“ cf” NameSpace =“ RewriteFormWorkaround” Assembly =“ MyCustomForm”%>
用以下内容替换您现有的表格:
<cf:Form runat =“ server” id =“ form1”>
......
</ cf:Form>
希望这对某人有帮助!!
翻译自: https://bytes.com/topic/asp-net/insights/920817-handling-form-errors-context-rewritepath
rewritepath