簡體   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