为什么MVC URL不可用?

时间:2013-10-08 16:37:53

标签: c# asp.net-mvc

我在VS.NET 2010中创建了一个新的MVC Web应用程序。我可以毫无问题地访问localhost / Home / Contact。这是一个内置于示例应用程序中的方法。

我添加了另一种方法:

[HttpPost]
public ActionResult MyMethod(ClassA content)
{
  return new HttpStatusCodeResult(204);
}

当我尝试使用以下方法访问此方法时:

本地主机/主页/的MyMethod

我收到404错误。我已经尝试直接在浏览器(GET)和POSTing。知道什么可能是错的吗?

2 个答案:

答案 0 :(得分:1)

HttpPost属性表示只能通过POST请求访问该操作,它可以保护您免受其他请求类型(GET,PUT等)的影响。

POST个请求也可以在没有属性的情况下运行,但GET个请求也会有效!这可能会暴露通过GET请求插入,更新或删除数据的数据库查询,这是一种不好的做法。想象一下Google将这样的页面编入索引:www.mysite.com/Users/Delete/{id},如果您接受GET请求,它可能会删除您的完整用户群。

GET用于检索数据,POST用于提交数据。有关详细信息,请参阅this question

有多种方法可以发起POST请求。

您可以将表单打包在Html.BeginForm()

@using (Html.BeginForm())
{
    @Html.LabelFor(m => m.UserName);
    @Html.TextBoxFor(m => m.UserName);

    @Html.LabelFor(m => m.Password);
    @Html.PasswordFor(m => m.UserName);

    <input type="submit" value="Login" />
}

或通过jQuery.post()

$.post(
    '@Url.Action("MyMethod", "Home")',
    {
        // data for ClassA.
        name: $('#username').val(); // example.
    },
    function (result) {
        // handle the result.
    });

但是,如果您使用GET属性修饰了操作,则此HttpPost请求不会工作:

$.get(
    '@Url.Action("MyMethod", "Home")',
    function (result) {
        // this will not work.
    });

或者,如果您尝试通过浏览器访问它。 另请参阅this blogpost

答案 1 :(得分:0)

此方法仅可通过POST访问。