代码之家  ›  专栏  ›  技术社区  ›  Samantha Branham

当我的表单方法为POST时请求GET的用户

  •  2
  • Samantha Branham  · 技术社区  · 16 年前

    我在我们的网站上看到一个断断续续的问题。一些用户试图通过 GET POST . 错误总是来自IE用户。我注意到一些UA字符串引用了“yie8”,我假设它是雅虎的IE8包。我想雅虎!工具栏可能对我不利,但我不能复制安装了工具栏的IE7上的问题。这个问题不仅发生在这个表单上,而且还发生在其他各种表单上,其中许多表单是使用jQuery通过Ajax提交的 表单插件

    一个简单的解决办法就是把我所有的 AcceptVerb() 属性,但那完全是站不住脚的。有没有人遇到过这样的事情,或者对如何处理它有什么想法?


    We've got a Web problem! Exception thrown:
    http://my.web.site/User.mvc/ResetPassword
    Method: GET
    
    User: <not logged in>
    UserAgent: IE 7 (Mozilla/4.0 (compatible; MSIE 7.0;Windows NT 5.1;.NET CLR 1.1.4322;.NET CLR 2.0.50727;.NET CLR 3.0.04506.30))
    
    Exception: System.Web.HttpException
    Message: A public action method 'ResetPassword' could not be found on controller 'MyApp.Controllers.UserController'.
    

    这是呈现给浏览器的HTML。

    <form action="/User.mvc/ResetPassword" class="standard-form small-form" method="post"> 
        <fieldset> 
            <div class="row"> 
                <label for="usernameTextBox">User Name</label> 
                <input type="text" name="username" id="usernameTextBox" /> 
            </div> 
            <div class="row"> 
                <label for="emailTextBox">Email Address</label> 
                <input type="text" name="email" id="emailTextBox" /> 
            </div> 
            <div class="row"> 
                <label>&nbsp;</label> 
                <input type="submit" value="Reset Password" /> 
            </div> 
        </fieldset> 
    </form> 
    

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult ResetPassword(string username, string email)
    

    (是的,电子邮件地址必须与我们存档的地址匹配)

    4 回复  |  直到 16 年前
        1
  •  1
  •   Neil Moss    16 年前

    可能一个答案比实际答案提出更多的问题,但本着尽力帮助的精神。。。

    如果你的网站是内部的,我会怀疑用户正在玩“刷新”。

        2
  •  1
  •   Ben S    16 年前

    我认为你对此无能为力。某些浏览器插件/工具栏具有允许从GET更改窗体的功能->邮政,反之亦然。

    如果你的用户正在这样做,你真的什么都做不了。

        3
  •  1
  •   grossvogel    16 年前

    当网站访问者做出这种错误行为时,你必须扪心自问:“这是一个合理的误解的可能性有多大?”在我看来,使用错误的HTTP方法并不是一个浏览器所做的事情,因为它是旧的、有缺陷的或其他什么。这是一个无效的请求,所以给他们发一个405然后处理它。

    (我听说一些浏览器和插件试图‘预加载’从当前页面可以访问的页面,但这是一个蹩脚的‘特性’。我的回答仍然是将其视为无效请求。)

        4
  •  0
  •   Matteo Mosca    16 年前

    我得说这其实不是你的问题。你设计你的站点是为了按预期的方式工作,你对你的方法设置了GET/POST限制(出于安全或其他原因)。