调用 Web.api 时收到 'Method not allowed' 错误'

While Calling Web.api getting 'Method not allowed' error'

在使用 web.Api 时,我得到了不允许的方法 (405)。我遵循了所有步骤,但问题仍然存在。但是当我通过 soapUi 进行测试时,它运行良好。请帮助

Web.Api声明:

 [Route("ForgotPassword")]
    [AcceptVerbs( "POST")]
    public ForgotPasswordResponse ForgotPassword(string emailId)
    {

        AccountInfo accountInfo = _manager.GetUserByEmailId(emailId);

        if (accountInfo == null)
            return new ForgotPasswordResponse
            {
                Response = "error",
                Message = "Email address not found"
            };

        return new ForgotPasswordResponse
        {
            Response = "success",
            Message = "password reset link set to registered email id"
        };
    }

消费服务调用:

     using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri("http://100.7.11.76");
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                var response12 = client.GetAsync("test.Api/api/account/ForgotPassword?EmailId=" + email + "").Result;
                if (response12.IsSuccessStatusCode)
                {
                    string responseString = response12.Content.ReadAsStringAsync().Result;
                }
            }

Route 属性更改为 [Route("api/account/ForgotPassword")],将 POST 更改为 GET 并首先从 REST 客户端(例如 PostMan)测试您的方法,然后在您的应用程序中使用它。

您的 WebAPI 控制器 ForgotPasswordResponse 接受动词 "POST" 并且您的 WebAPI 客户端以 GET 方式调用它。因此你得到 406: Method not allowed 响应。让您的控制器接受 GET 动词或使用 PostAsJsonAsync 方法而不是 GetAsync.

调用 WebAPI

尝试使用身份验证过滤器 [AllowAnonymous]

        [AllowAnonymous]
        [Route("ForgotPassword")]
        [AcceptVerbs( "POST")]
        public ForgotPasswordResponse ForgotPassword(string emailId)
        {

            AccountInfo accountInfo = _manager.GetUserByEmailId(emailId);

            if (accountInfo == null)
                return new ForgotPasswordResponse
                {
                    Response = "error",
                    Message = "Email address not found"
                };

            return new ForgotPasswordResponse
            {
                Response = "success",
                Message = "password reset link set to registered email id"
            };
        }