2017-06-08 10 views
0

私は細かい作業と闊歩によってテストされ、次のDELETE WebAPIの実装を持っている:C#でこのdelete Web APIメソッドを呼び出す方法は?

//Delete IVR Paycode Profiles 
[System.Web.Http.HttpDelete, System.Web.Http.Route("PayCodeProfile")] 
public System.Threading.Tasks.Task<ConfirmResponse> DeleteIVRPaycodeProfile(string profileIds) 
{ 
    string orgoid = HttpContext.Current.Request.Headers["ORGOID"]; 
    SetContext(orgoid); 
    return _implementation.DeleteIVRPaycodeProfileAsync(orgoid, profileIds); 
} 

そして、私は以下のようにクライアントから呼び出しています:

var endpointURL = new Uri("http://localhost/ADP.TLM.IVR/TLM/v1/IVR/PayCodeProfile/1,2,3"); 
var request = WebRequest.Create(endpointURL) as HttpWebRequest; 
if (request != null) 
{ 
    request.Headers.Add("ORGOID", "G344G4GEJXDJJ9M5"); 

    // sending comma separated string of ids like 1,2, 
    // not sure if the ContentType is correct 
    request.ContentType = "text/html"; 

    request.Method = "DELETE"; 

    using (var response = request.GetResponse() as HttpWebResponse) 
    { 
     if (response != null) 
     { 
      var reader = new StreamReader(response.GetResponseStream()); 
      var result = reader.ReadToEnd(); 
      var resp = JsonConvert.DeserializeObject<ConfirmResponse>(result); 
     } 
    } 
} 

しかし、私は信じている404:Not Found errorを取得していますどこかで私はContentTypeの間違いをしています。

+0

彼の答えにあります。 –

答えて

0

問題はあなたのURLです。最初にこのアドレスにリクエストを送信する必要があります: "http://localhost/ADP.TLM.IVR/TLM/v1/IVR/PayCodeProfile"。あなたのコンテンツタイプ(デフォルトではjson)に依存して、あなたの要求を作成します。あなたのコンテンツタイプがJSONである場合は、これを試してみてください。

private static T Call<T>(string url, string body, int timeOut = 60) 
{ 
    var contentBytes = Encoding.UTF8.GetBytes(body); 
    var request = (HttpWebRequest)WebRequest.Create(url); 

    request.Timeout = timeOut * 1000; 
    request.ContentLength = contentBytes.Length; 
    request.Method = "DELETE"; 
    request.ContentType = @"application/json"; 

    using (var requestWritter = request.GetRequestStream()) 
     requestWritter.Write(contentBytes, 0, (int)request.ContentLength); 

    var responseString = string.Empty; 
    var webResponse = (HttpWebResponse)request.GetResponse(); 
    var responseStream = webResponse.GetResponseStream(); 
    using (var reader = new StreamReader(responseStream)) 
    { 
     reader.BaseStream.ReadTimeout = timeOut * 1000; 
     responseString = reader.ReadToEnd(); 
    } 

    return JsonConvert.DeserializeObject<T>(responseString); 
} 

そして、このようにそれを呼び出す:ちょうどデビッドのような、あまりにも使用して文に埋め込む `VARリーダー=新しいStreamReader`、:ちょうどさておきとして

var url = "http://localhost/ADP.TLM.IVR/TLM/v1/IVR/PayCodeProfile"; 
    var body = JsonConvert.SerializeObject(new { profileIds = "1,2,3" }); 
    var output = Call<dynamic>(url, body); 
+0

デイヴィッド、それは動作していません..私は405を取得しています:(var response = request.GetResponse()HttpWebResponseとして)この行を使用してメソッドが許可されていません。 – user2948533

+0

ok。それは別の問題です。 WebApiはおそらくCORS要求をブロックします。 WebApiでCORSを有効にするには、Microsoft.AspNet.WebApi.Corsパッケージを使用します。詳細については、http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-apiを参照してください。 – David

関連する問題