【发布时间】:2017-12-14 06:20:45
【问题描述】:
当我从设备或模拟器上的 xamarin 移动应用程序调用 Web API 时,出现 405 方法未找到错误。
当我从邮递员那里调用时,web api 运行成功。
此错误仅适用于 POST 方法。
有人知道吗?
请提出建议。
编辑:
public async Task Request(string url, string contents, HttpMethod methodType, string mediaStream = "application/json", bool isTokenNeeded = true)
{
bool isSuccessRequest = true;
string responseBodyAsText;
try
{
if (!Utility.IsServiceAvailable)
{
OnError?.Invoke(new ErrorData
{
ErrorText = SystemMessages.OfflineServer
});
return;
}
HttpClientHandler handler = new HttpClientHandler();
using (HttpClient httpClient = new HttpClient(handler))
{
HttpRequestMessage message = new HttpRequestMessage(methodType, url);
if (methodType == HttpMethod.Post)
{
message.Headers.ExpectContinue = false;
message.Content = new StringContent(contents);
// message.Content.Headers.ContentLength = contents.Length;
message.Content.Headers.ContentType = new MediaTypeHeaderValue(mediaStream);
}
// Add accesstoken to request header
if (isTokenNeeded)
httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + ApplicationConfiguration.Token.AccessToken);
httpClient.Timeout = new TimeSpan(0, 0, 10, 0, 0);
HttpResponseMessage response = await httpClient.SendAsync(message);
if (response.StatusCode == System.Net.HttpStatusCode.NotFound)
{
var error = new ErrorData() { ErrorText = SystemMessages.OfflineServer };
OnError?.Invoke(error);
return;
}
else if (response.StatusCode == System.Net.HttpStatusCode.BadRequest)
{
responseBodyAsText = response.Content.ReadAsStringAsync().Result;
var error = JsonConvert.DeserializeObject<ErrorData>(responseBodyAsText);
OnError?.Invoke(error);
return;
}
else if (response.StatusCode == System.Net.HttpStatusCode.Unauthorized)
{
responseBodyAsText = response.Content.ReadAsStringAsync().Result;
var error = JsonConvert.DeserializeObject<ErrorData>(responseBodyAsText);
OnError?.Invoke(error);
return;
}
else
{
response.EnsureSuccessStatusCode();
responseBodyAsText = response.Content.ReadAsStringAsync().Result;
}
}
}
catch (HttpRequestException hre)
{
responseBodyAsText = "Exception : " + hre.Message;
isSuccessRequest = false;
OnError?.Invoke(new ErrorData
{
ErrorText = hre.Message
});
}
catch (Exception ex)
{
responseBodyAsText = "Exception : " + ex.Message;
isSuccessRequest = false;
OnError?.Invoke(new ErrorData
{
ErrorText = ex.Message
});
}
}
【问题讨论】:
-
如果没有看到任何代码就很难判断。
-
@PaulKertscher 请检查我的编辑。
-
downvoter 关心解释一下:|
-
一些需要检查的事情:URL 和数据是否正确?如果需要身份验证:是否有有效的访问令牌?您是否正确传递了访问令牌?方法正确吗?
-
我投了反对票,因为我认为这不是一个很好的问题。添加代码后,它开始变得更好,但您真的应该将其剥离为minimal reproducible example。来电者网站也很高兴看到。
标签: asp.net-web-api xamarin.forms