【问题标题】:Access to web API from a console application从控制台应用程序访问 Web API
【发布时间】:2017-08-01 05:39:22
【问题描述】:

在学习 Web API 的过程中,我创建了(或者实际上 Visual Studio 有)一个简单的控制器。我还创建了一个可以从 Web API 的 GET() 部分读取的 WPF 程序,但我无法访问其他部分。

我已经尝试了很多,发现很多博客和页面都说:“就这样做......”但没有任何效果。我做错了什么?

MVC部分:

namespace MVCWebservice.Controllers
{
    public class LaLaController : ApiController
    {
        // GET: api/LaLa
        public string Get()
        {
            return "Hello from API";
        }

        // GET: api/LaLa/5
        public string Get(int id)
        {
            return "value";
        }

        // POST: api/LaLa
        public void Post([FromBody]string value)
        {
            var a = value;
        }

        // PUT: api/LaLa/5
        public void Put(int id, [FromBody]string value)
        {
            var b = value;
            int c = id;
        }

        // DELETE: api/LaLa/5
        public void Delete(int id)
        {
            int c = id;
        }
    }
}

我的控制台应用程序中的一个实际有效的方法:

private static async Task ReadFromWebApi()
{
    System.Net.Http.HttpClient client = new System.Net.Http.HttpClient();
    client.BaseAddress = new Uri("http://localhost:26176/");
    client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
    var resp2 = await client.GetAsync("api/LaLa/");
    resp2.EnsureSuccessStatusCode();
    var aaa = resp2.Content;
    string result = await aaa.ReadAsStringAsync();
    Console.WriteLine(result);
}

一个刚刚停止的方法:

如果我删除EnsureSuccessStatusCode,我会得到以下回复:

ss = "{\"Message\":\"请求的资源不支持http 方法'PUT'。\"}"

private static async Task SendToWebApi()
{
    System.Net.Http.HttpClient client = new System.Net.Http.HttpClient();
    client.BaseAddress = new Uri("http://localhost:26176/");
    client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
    Console.WriteLine("-1-");
    var resp2 = client.PutAsync("api/LaLa/", new System.Net.Http.StringContent("Hey", Encoding.UTF8, "application/json")).Result;
    Console.WriteLine("-2-");
    resp2.EnsureSuccessStatusCode();
    var ss = await resp2.Content.ReadAsStringAsync();
}

我将如何编写对其他方法的访问权限?

【问题讨论】:

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


【解决方案1】:

一方面,您在 URL api/LaLa/ 上调用 PUT,但来自服务器的方法签名

public void Put(int id, [FromBody]string value)

似乎 URL 应该包含一个数字 id 以满足第一个参数,例如api/LaLa/100 或类似的。或许您可以修改您的客户端,像这样调用PutAsync()

var resp2 = client.PutAsync("api/LaLa/100", new System.Net.Http.StringContent("Hey", Encoding.UTF8, "application/json")).Result;

POST 有效吗?看看this answer 一个看起来非常像你的问题,看看你能不能解决这个问题。

【讨论】:

  • 谢谢。我以为我已经尝试过了。现在我得到 100 到 id,但我的 Value 是 Null,我期望它是:“嘿”你也有这个想法吗?
  • 尝试用一些有效的 json 替换“嘿”。也许是 "{\"value\":\"Hey\"}"
猜你喜欢
  • 2016-04-06
  • 1970-01-01
  • 1970-01-01
  • 2015-08-24
  • 1970-01-01
  • 1970-01-01
  • 2020-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多