【发布时间】:2015-06-11 08:19:08
【问题描述】:
我想弄清楚如何使用 Web API。我已经阅读了一些教程,现在我正在尝试设置我的网络服务。 我很难弄清楚为什么它找不到我的方法。对我来说,这似乎是随机的(教程运行良好)。 在我的实验中,有时 get 方法会返回“方法不允许”。
这是我的服务:
public class ContentFilesController : ApiController
{
[Route("api/contentfile/{id}")]
[HttpGet]
public IHttpActionResult GetContentFiles(int count)
{
if (_contentFiles == null)
GenerateContentFileList();
List<ContentFile> files = new List<ContentFile>();
int i = 0;
while(true)
{
ContentFile cf = _contentFiles[i];
if(!_filesOutForProcessing.Contains(cf))
{
files.Add(cf);
i++;
}
if (i == count)
break;
}
return Ok(files);
}
[HttpPost]
[Route("api/contentfile/{files}")]
public IHttpActionResult Post([FromBody] List<ContentFile> files)
{
return Ok();
}
}
编辑: 这是我用来调用服务的代码:
static async Task TestAsync() {
using (var client = new HttpClient()) {
client.BaseAddress = new Uri("http://localhost:46015/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = await client.GetAsync("api/contentfile/1");
if (response.IsSuccessStatusCode)
{
var contentfiles = await response.Content.ReadAsAsync<List<ContentFile>>();
}
}
}
static async Task ReportTest()
{
List<ContentFile> files = new List<ContentFile>()
{
new ContentFile(){Path="hej"},
new ContentFile(){Path="då"}
};
using(var client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost:46015");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = await client.PostAsJsonAsync<List<ContentFile>>("api/contentfile", files);
if(response.IsSuccessStatusCode)
{
}
}
}
你从哪里开始寻找? 我在这里疯了。
谢谢!
编辑:澄清错误,两种客户端方法的问题是 HttpResponseMessage 有 response.IsSuccessStatusCode false 和 StatusCode = MethodNotAllowed 或 MethodNotFound。
【问题讨论】:
-
把代码表单放到你调用这个 API 的地方
-
我无法同时发布客户端代码。发帖时出现错误。但基本上这是我的客户端代码:
-
仍然没有代码!
-
您的客户端代码是否在同一个域上运行(我的意思是,同一个主机,同一个端口 - 通常这意味着您为 WebAPI 和 HTML 前端使用同一个项目)。如果不是,那么这可能是 CORS 问题 - 特别是因为您提到了 405 不允许的错误。
-
抱歉,发帖很困难,我一直收到“发帖时出错”
标签: c# rest asp.net-web-api