使用context.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

受保护的替代子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>

希望这对某人有帮助!

From: https://bytes.com/topic/asp-net/insights/920817-handling-form-errors-context-rewritepath

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值