繁体   English   中英

GET方法不允许使用405方法

[英]Getting 405 Method Not Allowed on a GET

在我的Web应用程序中单击以下链接将产生405:

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

这是从取消订阅控制器调用的确认操作:

    [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)中时,出现错误。

我对此很迷茫。 我已经搜寻了网,但似乎找不到任何原因。

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

还有ViewData吗? 请也删除它,以支持强类型视图和视图模型。 每当我看到有人使用ViewData我都会不得不说。

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

是否将其更改为此项工作:

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

请确保输出的网址有效,并且可以正确转义任何无效字符,例如,请确保&&amp;转义&amp;

如果您的emailUidhash有一个句点,则需要对其进行编码。 这不是唯一有问题的角色,但我怀疑情况就是这样。 在将这些值连接到URL之前,对它们使用HttpUtility.UrlEncode

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

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

非常感谢其他答案。 我一定会使用HTML帮助程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM