无法在C#WebApi中命中POST

时间:2016-05-27 17:40:38

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

我已经遍布堆栈溢出,无法解决我遇到的这个问题。

我正在尝试为我编写的一个小应用程序编写一个错误报告服务,该应用程序会抛出我的内部api并抛出异常并通过电子邮件发送给我。

正如我的代码所示,我似乎无法点击API控制器。我的请求返回500错误,我在控制器上设置的断点永远不会被命中。

这是api控制器(ErrorController.cs):

    [HttpPost]
    // POST: api/Error
    public HttpResponseMessage Post([FromBody]Exception err)
    {
        var result = _service.SendEmail(err);

        return Request.CreateResponse(result, err);
    }

它在WebApiConfig.cs中的配置:

       config.Routes.MapHttpRoute(
            name: "ErrorApi",
            routeTemplate: "api/error",
            defaults: new { controller = "error" }
        );

我试图在服务中,在catch块中调用它:

        catch (Exception err)
        {
            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri("http://localhost:61857/");
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                var response = client.PostAsJsonAsync("api/error",   err).Result;
            }
            return null;
        }

我有什么明显的遗失吗?我有点不确定如何正确发送异常作为JSON对象,然后将其传递到我的电子邮件服务。我认为这可能是我搞砸的地方。

提前感谢您的帮助! :)

1 个答案:

答案 0 :(得分:0)

我很确定在此网站上发布的这个问题有一个非常确定的答案,但仅仅因为我想帮助我给你我的意见。我认为您应该使用HttpWebRequest和HttpWebResponse来精确控制您的客户端: 像旧学校这样的东西:

                string uri = // whatever is your uri (http://url);
                string Method = // whichever is your method ("POST")
                HttpWebRequest req = WebRequest.Create(uri) as HttpWebRequest;
                req.KeepAlive = false;
                req.Method = Method.ToUpper();

                if (("POST,PUT").Split(',').Contains(Method.ToUpper()))
                {
                    content = // here write your content Stream.ReadToEnd() or something similar

                    byte[] buffer = Encoding.ASCII.GetBytes(content);
                    req.ContentLength = buffer.Length;
                    req.ContentType = // write your content type "text/xml";
                    Stream PostData = req.GetRequestStream();
                    PostData.Write(buffer, 0, buffer.Length);
                    PostData.Close();
                }

                HttpWebResponse resp = req.GetResponse() as HttpWebResponse;

                Encoding enc = Encoding.GetEncoding(1252);
                StreamReader loResponseStream =
                new StreamReader(resp.GetResponseStream(), enc);

                string Response = loResponseStream.ReadToEnd();

                loResponseStream.Close();
通过这种方式,您可以看到您实际在做什么。然后让您的wevservice处理您发送给它的任何内容。

或使用经过实际测试的其他包装或组件。