2015-06-29 48 views
0

我的一個POST動作是拋出HTTP 404錯誤。我已經在最近幾個小時了,不知道有什麼問題!同一控制器中的所有其他操作都可以正常工作。我很確定拼寫是正確的。在調試模式下,這種方法從來沒有被打(很明顯,我猜)。請幫忙。在ASP.NET MVC4中找不到控制器的動作-HTTP 404錯誤

這裏的操作方法 -

public class LookupTableController : Controller 
{ 
[HttpPost] 
    public ActionResult AjaxLookupTableCRUDDelete(int lookupId) 
    { 
     LookupTable lookuptable = db.LookupTables.Find(lookupId); 
     if (lookuptable != null) 
     { 
      db.LookupTables.Remove(lookuptable); 
      db.SaveChanges(); 
     } 
     return Index(); 
    } 

無論我怎樣嘗試訪問它,它拋出404錯誤!

我試過直接在瀏覽器上 - http://localhost:60328/LookupTable/AjaxLookupTableCRUDDelete/?lookupId=111

這表明 -

>Server Error in '/' Application. 

的資源不能被發現。 描述:HTTP 404.您正在查找的資源(或其中一個>依賴項)可能已被刪除,名稱已更改或暫時不可用。請檢查以下網址並確保它拼寫正確。

請求的URL:/ LookupTable中/ AjaxLookupTableCRUDDelete/

的Fiddler -

接頭 - POST/LookupTable中/ AjaxLookupTableCRUDDelete lookupId所= 13 HTTP/1.1 [HttpException]: A public action method 'AjaxLookupTableCRUDDelete' was >not found on controller 'GBPReconTool.Controllers.LookupTableController'.

路由是標準 -

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 

已解決 - 謝謝你,結果是GET和POST問題。 - 當我第一次編譯它時,它沒有HTTPGet或HTTPPost屬性。我不確定ASP.NET MVC4如何確定它應該是什麼。無論如何,明確的POST ajax調用失敗並開始直接在瀏覽器中進行測試。瀏覽器顯然是把它發佈爲GET。我仍然不清楚這是如何確定的,但我猜想將HTTPPost屬性添加到控制器是最終修復它的原因。猜猜我會讀到ASP.NET和瀏覽器如何確定操作是GET還是POST。

+0

嘗試快速測試:更改此動作以接受GET動詞,並嘗試通過querystring達到此操作:http:// localhost:60328/LookupTable/AjaxLookupTableCRUDDelete?lookupId = 111, –

+0

@Thiago Custodio - 我只是試着改變要得到。現在它說這是當我將操作改爲GET時顯示的內容 - 「視圖'AjaxLookupTableCRUDDelete'或其主控沒有被找到或沒有視圖>引擎支持搜索到的位置。搜索到以下位置:...」 – Achilles

回答

0

使用這種嘗試......

[HttpPost] 
public ActionResult AjaxLookupTableCRUDDelete(int id) 
{ 
    LookupTable lookuptable = db.LookupTables.Find(id); 
    if (lookuptable != null) 
    { 
     db.LookupTables.Remove(lookuptable); 
     db.SaveChanges(); 
    } 
    return Index(); 
} 

然後嘗試使用...

POST http://localhost:60328/LookupTable/AjaxLookupTableCRUDDelete/111 

正如其他人所指出的,你需要確保該請求被髮送的POST。

您可能要檢查的另一件事是在提琴手中正確設置ContentType。

Content-Type: application/json; charset=utf-8 
+0

剛剛嘗試過,就像那樣。拋出相同的錯誤 - 無法找到資源。 描述:HTTP 404.您正在查找的資源(或其某個依賴項)可能已被刪除,名稱已更改或暫時不可用。請檢查以下網址並確保它拼寫正確。 請求的URL:/ LookupTable/AjaxLookupTableCRUDDelete/111 – Achilles

+0

您有可能提供您正在發送的Fiddler POST的屏幕截圖嗎? –

0

變化的行動簽名如下:

public ActionResult AjaxLookupTableCRUDDelete(int? id) 
    { 
    } 

這裏的想法是有作用的變量名的比賽你已經在你的路線。

文章網址將需要看起來像這樣:

http://localhost:60328/LookupTable/AjaxLookupTableCRUDDelete/111 

你不需要提供變量名,因爲MVC將基於URL的路線上閃耀它

+0

「POST網址」?也許我在這裏錯過了一些東西,但是你如何在url中傳遞參數並期望POST工作? –

+0

@ShaiCohen asp.net mvc將從uri中拉取參數。你不需要有一個表單主體來發布。 – pnm

0

我知道這聽起來簡單,但:

  • 確保您保存在類文件
  • 確保您構建的項目

然後使用Chrome或FireFox開發工具(F12)並查看網絡選項卡。您可以查看傳遞到應用程序的實際URL和類型(POST,GET)。您還將看到任何查詢字符串參數和表單數據。

一般情況下,如果有什麼不對的地方,就會明白這一點。

僅供參考 - 您也可以使用Fiddler2來查看實際的http請求。