2014-10-02 804 views
0

从MVC控制器调用的Web API POST方法返回下面的错误:调用Web API Post方法错误“远程服务器返回错误:(405)不允许的方法”

"The remote server returned an error: (405) Method Not Allowed"

下面MVC控制器动作代码调用一个辅助类的方法和在调试时,我可以看到控制移动从这里到下一个方法:

public ActionResult Submit(FormCollection form) 
{ 
    Lead_Options lead = new Lead_Options();    
    lead.Situation = form.GetValue("InsuranceFor").AttemptedValue; 
    lead.State = form.GetValue("InsuranceState").AttemptedValue; 

    Uri url= Url_Helper.GetUri(BaseUrl, service1+"Post"); // returns http://localhost:52985/api/HealthInsurance/Post 

    string obj= new JavaScriptSerializer().Serialize(lead); 

    Object data = WebApi_Helper.PostData(url,obj); 

    return RedirectToAction("Parameters"); 
} 

“WebApi_Helper.PostData”的Helper类,被起诉的通用方法来调用Web API:

public static string PostData(Uri url,string obj) 
    { 
     string data = null; 

     try 
     { 
      using (WebClient proxy = new WebClient()) 
      { 
       proxy.Headers.Add(HttpRequestHeader.Accept, "application/json"); 
       data = proxy.UploadString(url,"Post", obj); //Here got error 
      } 
     } 
     catch (Exception ex) 
     {    
      throw ex; 
     } 
     return data; 
    } 

下面的WebAPI方法的代码,但在调试时要求不来这里都

[HttpPost] 
public void Post(string lead) 
{ 
    //leadOptService.AddListOptions(lead); 
} 

请告诉我我在做什么错误以及如何解决。

回答

0

HTTP方法是case sensitive。试着用:

data = proxy.UploadString(url,"POST", obj); 

data = proxy.UploadString(url, obj); // this overloads POSTs the data 

此外,HttpPost属性是因为网络API冗余,按照惯例将只允许POSTpublic void Post(string lead)

作为一个良好的做法,Post应返回一个值。在极小的情况下,HttpResponseMessage的状态码为201(成功)或500(对于错误)和其他适用的编码。

相关问题