C# Web API调用可以工作,但提供了视图';xxx和x27;或者找不到其主视图,或者没有查看引擎支持

C# Web API调用可以工作,但提供了视图';xxx和x27;或者找不到其主视图,或者没有查看引擎支持,c#,asp.net-mvc-4,asp.net-web-api,C#,Asp.net Mvc 4,Asp.net Web Api,奇怪的是,代码调用了这个方法,方法grabacat在服务器上执行(我调试了它并一步一步地执行到底)。代码返回到客户机,但它收到的响应是500内部服务器错误和上述消息。所以它说它找不到它刚刚成功调用的WebAPI方法 using (var response = await client.PostAsXmlAsync("cats/grabacat", mycatprefs)) { if (response.IsSuccessStatusCode) // 500 cats/grabacat n

奇怪的是,代码调用了这个方法,方法
grabacat
在服务器上执行(我调试了它并一步一步地执行到底)。代码返回到客户机,但它收到的响应是500内部服务器错误和上述消息。所以它说它找不到它刚刚成功调用的WebAPI方法

using (var response = await client.PostAsXmlAsync("cats/grabacat", mycatprefs))
{
    if (response.IsSuccessStatusCode) // 500 cats/grabacat not found
控制器代码:

[Route("~/api/cats/grabacat")]
[HttpPost]
public async Task GrabACat()
{
}
调试后,如果我将其更改为
public async Task GrabACat()
,则工作正常。这使我可以将对象返回到客户端。但是我不想把任何东西还回去;我希望它等同于调用
void
方法。它将检查状态代码以确定是否成功

通过将GrabACat更改为Task并返回
newobject(),我使它工作起来但我不确定为什么需要这样做。返回一个空对象只是为了让它工作似乎很粗糙


有什么想法吗?

WebAPI方法有如下路由属性:

[Route("~/api/cats/grabacat")]
这意味着POST请求中的URL错误-您缺少
/api
前缀:

using (var response = await client.PostAsXmlAsync("api/cats/grabacat", mycatprefs))
    //snip

你能在这里复制你的抓取行动吗?您似乎正在从中返回一个显示控制器代码的视图。您的控制器是否继承自
ApiController
,返回类型是什么?我认为我们需要查看控制器代码。“服务器代码中没有错误”-有,只是代码中没有直接的错误。如果您声称从API调用中得到了500个错误,那么WebAPI在代码返回后仍会进行一些处理。你需要找到那个错误。API方法返回什么<代码>返回Ok()?请求的响应消息是什么?
response.Content.ReadAsStringAsync().Result
向您展示了什么?您已接近第500个问题,您应该知道现在应该在问题中包含更多细节。:-)这对任何人来说都不足以解决问题。哇,这种态度。让我重述一下:您对WebAPI的调用返回了一个错误,对吗?因此,您的代码中有一个错误。事实上,您可以逐步完成API方法,并不意味着该代码是好的。WebAPI在运行代码后会进行一些处理,如果代码有错误,则在成功地单步执行代码后完全有可能出现错误。您使用的
async
错误,这就是错误的根源。您不应该从ASP.NET启动长时间运行的任务,
async
也没有帮助。如果WebAPI返回一个关于视图的500错误,则说明您的代码是错误的。可能是这样,但无法使用此处显示的URL调用该方法。该方法调用工作正常。它还通过返回某种类型的对象来修复。所以我想知道为什么必须返回一个对象。@SLC对不起,我不明白你在说什么。当对象是异步任务调用时,如何返回该对象?中断的代码是
async Task
。如果我将返回类型更改为
async Task
,则它可以工作。但是我不想返回
someObject
,我不想返回任何东西。您是否正在等待API方法中的任何东西?