2013-06-18 38 views
2

我想在mvc4中創建我的第一個REST應用程序與web api。我有一個用HttpPost動詞設置的控制器,但由於某種原因,當我單擊鏈接將xml字符串發送到控制器時,出現錯誤 - 「{」Message「:」沒有找到與請求URI相匹配的HTTP資源「 /api/Apply/ApplyToJob'.","MessageDetail":"沒有在控制器'Apply'上找到匹配請求的操作。「}」任何想法我可能做錯了什麼?這裏的查看頁面...無法與jQuery Ajax後得到網絡api控制器操作

<a href="javascript:void(0);" id="lnkPost">Post Data</a> 

<script type="text/javascript"> 
    window.onload = function() { 
     $("#lnkPost").on("click", function() { 

      $.get("/TestResponse.xml", function (d) { 
       $.ajax({ 
        //contentType: "text/xml", 
        //dataType: "xml", 
        type: "post", 
        url: "/api/Apply/ApplyToJob", 
        data: { 
         "strXml": (new XMLSerializer()).serializeToString(d) 
        }, 
        success: function() { console.log('success'); } 
       }); 
      }); 
     }); 
    }; 
</script> 

這裏是控制器。

public class ApplyController : ApiController 
{ 
    [HttpPost] 
    [ActionName("ApplyToJob")] 
    public string ApplyToJob(string strXml) 
    { 
     return "success"; 
    } 
} 
+0

僅發佈到/ API /應用 – Maess

+0

此外,您可能需要做一些額外的閱讀,因爲你所採取的方法並不是真正的RESTFUL。 – Maess

+0

我假設你的意思是因爲該方法沒有命名爲Post? –

回答

2

修改你的行動的參數,如下圖所示:

public string ApplyToJob([FromBody]string strXml)

這是因爲如果沒有這個FromBody屬性,字符串參數,預計來自URI。由於你在Uri中沒有這個動作選擇,所以失敗了。

另外,看看你的客戶端代碼,你不應該在你的請求中設置合適的內容類型標題嗎?

編輯

您可以修改你的JavaScript下面喜歡,看看它的工作原理:

$.ajax({ contentType: "text/xml", 
      dataType: "xml", 
      type: "post", 
      url: "/api/values", 
      data: "your raw xml data here", 
      success: function() { console.log('success'); } 
     }); 
+0

謝謝。添加[FromBody]確實讓我得到了我的操作,但是strXml以null結束。至於內容類型頭文件,我一直在嘗試各種各樣的東西來實現它,所以這就是爲什麼一些代碼被註釋掉了。 –

+0

WebApi依賴於內容類型頭文件,以便找到正確的格式化程序來反序列化主體。確保有正確的,你應該看到一個非空值。 –

+0

我取消了前兩行的註釋,因此它將contentType設置爲text/xml,將dataType設置爲xml,但它仍然通過null。你知道我是否需要將其設置爲其他內容?另外,是否有一種方法可以指定控制器操作只接收一個字符串而不給它一個變量名稱(strXml)?我問的原因是,我們試圖綁定到LinkedIn的API,我不知道他們將發佈給我們的XML將有一個像我的例子一樣的變量名稱。 –

相關問題