在学习Web API的过程中,我创建了一个简单的控制器(或实际上是Visual Studio)。我还创建了一个WPF程序,可以从web API的GET()部分读取,但我无法访问其他部分。
我已经尝试了很多,发现很多博客和网页都说:"就这样做......"但没有任何作用。我做错了什么?
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 =" {\"消息\":\"请求的资源不支持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();
}
我如何编写对其他方法的访问权限?
答案 0 :(得分: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一个看起来非常像你的问题,看看你是否可以让它发挥作用。