Asp.net web api 405从设备调用web api时未找到方法错误

Asp.net web api 405从设备调用web api时未找到方法错误,asp.net-web-api,xamarin.forms,Asp.net Web Api,Xamarin.forms,405当我在设备或模拟器上从我的xamarin移动应用程序调用web API时,出现“找不到方法”错误 当我从邮递员处调用时,web api成功运行 此错误仅适用于POST方法 有人知道吗 请建议 编辑: 公共异步任务请求(字符串url、字符串内容、HttpMethod方法类型、字符串mediaStream=“application/json”,bool-istokneeded=true) { bool issccessrequest=true; 字符串responseBodyAsText; 尝

405当我在设备或模拟器上从我的xamarin移动应用程序调用web API时,出现“找不到方法”错误

当我从邮递员处调用时,web api成功运行

此错误仅适用于POST方法

有人知道吗

请建议

编辑:

公共异步任务请求(字符串url、字符串内容、HttpMethod方法类型、字符串mediaStream=“application/json”,bool-istokneeded=true)
{
bool issccessrequest=true;
字符串responseBodyAsText;
尝试
{
如果(!Utility.IsServiceAvailable)
{
OnError?调用(新错误数据)
{
ErrorText=SystemMessages.OfflineServer
});
返回;
}
HttpClientHandler handler=新的HttpClientHandler();
使用(HttpClient HttpClient=新HttpClient(处理程序))
{
HttpRequestMessage=新的HttpRequestMessage(方法类型,url);
if(methodType==HttpMethod.Post)
{
message.Headers.ExpectContinue=false;
message.Content=新的StringContent(contents);
//message.Content.Headers.ContentLength=contents.Length;
message.Content.Headers.ContentType=新的MediaTypeHeaderValue(mediaStream);
}
//将accesstoken添加到请求头
如果(iStokenneed)
httpClient.DefaultRequestHeaders.Add(“授权”、“承载者”+ApplicationConfiguration.Token.AccessToken);
httpClient.Timeout=新的时间跨度(0,0,10,0,0);
HttpResponseMessage response=等待httpClient.SendAsync(消息);
if(response.StatusCode==System.Net.HttpStatusCode.NotFound)
{
var error=new ErrorData(){ErrorText=SystemMessages.OfflineServer};
OnError?调用(错误);
返回;
}
else if(response.StatusCode==System.Net.HttpStatusCode.BadRequest)
{
responseBodyAsText=response.Content.ReadAsStringAsync().Result;
var error=JsonConvert.DeserializeObject(responseBodyAsText);
OnError?调用(错误);
返回;
}
else if(response.StatusCode==System.Net.HttpStatusCode.Unauthorized)
{
responseBodyAsText=response.Content.ReadAsStringAsync().Result;
var error=JsonConvert.DeserializeObject(responseBodyAsText);
OnError?调用(错误);
返回;
}
其他的
{
response.EnsureSuccessStatusCode();
responseBodyAsText=response.Content.ReadAsStringAsync().Result;
}
}
}
捕获(HttpRequestException hre)
{
responseBodyAsText=“异常:”+hre.消息;
isSuccessRequest=false;
OnError?调用(新错误数据)
{
ErrorText=hre.Message
});
}
捕获(例外情况除外)
{
responseBodyAsText=“异常:”+ex.消息;
isSuccessRequest=false;
OnError?调用(新错误数据)
{
ErrorText=例如消息
});
}
}

405是一个服务器响应,通知您目标资源不支持该方法(
POST
GET
PUT
,…)

源服务器知道在请求行中接收的方法,但目标资源不支持该方法

()


如果您的web API配置正确,我认为您使用了错误的方法调用了API,例如,当它应该是
GET
或其他方式时,使用了
POST

我将
web.config
中的
cookieless=“AutoDetect”
更改为
cookieless=“UseCookies”
问题解决了。

如果看不到您的任何代码,很难说。@PaulKertscher请检查我的编辑。请解释:|有些事情需要检查:URL和数据正确吗?如果需要身份验证:是否有有效的访问令牌?您是否正确传递了访问令牌?方法正确吗?我投了反对票,因为我认为这不是一个很好的问题。随着代码的添加,它开始变得更好,但是您应该将其精简到一个新的级别。调用方站点也很高兴看到。@NeelamPrajapati-405是一个服务器响应。您不能告诉我您的请求完全相同,但您的服务器响应仍然不同。是的,它是actlay。。还有一件事我想告诉你。此web服务托管在本地iis中。
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
        });
    }
}