点击我的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)中托管它时,我得到了错误。
我很遗憾。我已经搜过网了,但似乎找不到任何理由为什么会发生这种情况。
答案 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)
确保输出的网址有效且任何无效字符都已正确转义,例如,请确保将&
转义为&
答案 3 :(得分:0)
如果您的emailUid
或hash
中有句号,则需要对其进行编码。这不是唯一有问题的人物,但我怀疑这是个案。在将这些值连接到URL之前,请对这些值使用HttpUtility.UrlEncode
。
为什么选择405?可能是因为IIS6中没有用于假定的“文件扩展名”的脚本映射。它根本不是文件扩展名,但如果没有对URL中的句点进行编码,它就不会更好。
答案 4 :(得分:0)
好吧,我发现了我的问题。事实证明我的IIS配置存在问题。在IIS 6中,我不允许在目录中执行脚本,因此我的.svc永远不会为我的服务主机运行。一旦我更改了该设置,我就不再收到405错误...
非常感谢其他答案。我一定会使用Html助手。