错误:System.Net.Http.HttpRequestException:响应状态代码未指示成功:405(方法不允许)

时间:2021-01-07 02:37:49

标签: asp.net-core-3.1 blazor-server-side

*从 Blazor 应用程序调用 Asp.NET Core 3.1 Web api 时出现以下异常。 但是相同的代码在 Visual Studio 调试中效果很好

响应状态代码不表示成功:405(方法不允许)。 在 System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode() 在 Microsoft.AspNetCore.Components.HttpClientJsonExtensions.SendJsonAsync[T](HttpClient httpClient, HttpMethod method, String requestUri, Object content)*

//UI Code
public async Task<bool> UpdateCOAValue(COALookUps dataItem)
        {
            bool result = false;

            try
            {
                bool response = await _httpClient.SendJsonAsync<bool>(HttpMethod.Put, 
                    String.Format(@_webApi.WebAPIUrl, "update"), dataItem);
                result = await Task.FromResult(response);
            }
            catch (Exception ex)
            {
                Log.Error("Error: {0}", ex);
            }

            return result;

        }

//Web API Controller Method

        [HttpPut("update")]
        public bool UpdateCOAEntry([FromBody]COALookups value)
        {

            try
            {

                List<SqlParameter> lstSQLParams = new List<SqlParameter>();
                SqlParameter paramCOALookUpID = new SqlParameter();
                //other codes
                  dbManager.Update("UpdateCOALookUp", CommandType.StoredProcedure, lstSQLParams.ToArray());

            }
            catch (Exception ex)
            {
                Log.Error("Error: {0}", ex);
                return false;
            }

            return true;
        }
 
//Web API Controllers syntax
    [Route("api/[controller]")]
    [ApiController]
    public class COAController : ControllerBase
    {}

2 个答案:

答案 0 :(得分:0)

这对我有用。 (这是一种解决方法),每次发布后都必须重做。如果有人有更好的解决方案,请留言。

  1. 打开 WebDav 创作规则,然后选择禁用 WebDAV 选项 出现在右侧栏上。

  2. 选择模块,找到 WebDAV 模块并将其删除。

  3. 选择HandlerMapping,找到WebDAVHandler并删除。

答案 1 :(得分:0)

我发现此解决方案比更改 IIS 中的任何设置更有效 在 ConfigureServices 方法中添加以下内容

var handler = new HttpClientHandler()
            {
                UseDefaultCredentials = false,
                Credentials = System.Net.CredentialCache.DefaultCredentials,
                AllowAutoRedirect = true
            };

            services.AddSingleton(sp =>
            new HttpClient(handler)
            {
                BaseAddress = new Uri(Configuration["WebAPI:BaseUrl"])
            });