如何在C#中调用此删除web api方法?

时间:2017-06-08 08:22:21

标签: c# asp.net-web-api

我实现了以下删除WebAPI,它运行良好并通过swagger测试:

//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犯了一个错误。

1 个答案:

答案 0 :(得分:0)

问题是你的网址。首先,您需要将请求发送到此地址:“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 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);