在GET上不允许使用405方法

时间:2011-09-21 22:04:38

标签: c# .net asp.net-mvc asp.net-mvc-2 iis-7.5

点击我的webapp中的以下链接会产生405:

<a href="/unsubscribe/confirm?emailUid=<%= ViewData["emailUid"] %>&hash=<%= ViewData["hash"] %>" class="button">Yes, unsubscribe me.</a>

这是从Unsubscribe控制器调用的确认操作:

    [HttpGet]
    public ActionResult Confirm( string emailUid, string hash)
    {
        using ( UnsubscribeClient client = new UnsubscribeClient() )
        {
            UnsubscribeResponse response = client.Unsubscribe( emailUid, hash );
            return View( response );
        }

    }

简单的东西。它在我F5时工作,但是当我在IIS(7.5和6)中托管它时,我得到了错误。

我很遗憾。我已经搜过网了,但似乎找不到任何理由为什么会发生这种情况。

5 个答案:

答案 0 :(得分:3)

<%= Html.ActionLink(
    "Yes, unsubscribe me.",
    "Confirm", 
    "Unsubscribe", 
    new { emailUid = ViewData["emailUid"], hash = ViewData["hash"] }, 
    new { @class = "button" }
) %>

另外ViewData?!请删除它,以支持强类型视图和视图模型。每当我看到有人使用ViewData时,我都有义务这么说。

答案 1 :(得分:0)

锚中实际呈现的HTML href是什么?生成的URI是否有效?

将其更改为此作品:

 <%= Html.ActionLink("Yes, unsubscribe me.", "Confirm", "Unsubscribe", new { emailUid= ViewData["emailUid"], hash = ViewData["hash"]})%>

答案 2 :(得分:0)

确保输出的网址有效且任何无效字符都已正确转义,例如,请确保将&转义为&amp;

答案 3 :(得分:0)

如果您的emailUidhash中有句号,则需要对其进行编码。这不是唯一有问题的人物,但我怀疑这是个案。在将这些值连接到URL之前,请对这些值使用HttpUtility.UrlEncode

为什么选择405?可能是因为IIS6中没有用于假定的“文件扩展名”的脚本映射。它根本不是文件扩展名,但如果没有对URL中的句点进行编码,它就不会更好。

答案 4 :(得分:0)

好吧,我发现了我的问题。事实证明我的IIS配置存在问题。在IIS 6中,我不允许在目录中执行脚本,因此我的.svc永远不会为我的服务主机运行。一旦我更改了该设置,我就不再收到405错误...

非常感谢其他答案。我一定会使用Html助手。