[英]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"]})%>
請確保輸出的網址有效,並且可以正確轉義任何無效字符,例如,請確保&
以&
轉義&
如果您的emailUid
或hash
有一個句點,則需要對其進行編碼。 這不是唯一有問題的角色,但我懷疑情況就是這樣。 在將這些值連接到URL之前,對它們使用HttpUtility.UrlEncode
。
為什么是405? 可能是因為IIS6中對於假定的“文件擴展名”沒有腳本映射。 它根本不是文件擴展名,但是如果不對URL中的句點進行編碼,那就更好了。
好吧,我發現了我的問題。 事實證明我的IIS配置有問題。 在IIS 6中,我不允許在目錄中執行腳本,因此.svc永遠不會為我的服務主機運行。 更改該設置后,我不再收到405錯誤...
非常感謝其他答案。 我一定會使用HTML幫助程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.