【问题标题】:I am sending post method to server but receiving get method我正在向服务器发送 post 方法但接收 get 方法
【发布时间】:2021-05-21 04:28:49
【问题描述】:

我正在开发 .net core 3.1 api

调用 api 时出错。服务器响应 405

jquery.min.js:2 GET https://localhost:44345/api/Home/AddUpdateUser?callback=jQuery351026836393378483203_1613635815143&name=Ahsan&email=ahsan%40gmail.com&password=asdsdasda&_=1613635815145 net::ERR_ABORTED 405

这是我的 api 控制器类

public class HomeController : ControllerBase
    {
        private IRegisterUser _user;
        private IMapper _mapper;

        public HomeController(IRegisterUser user, IMapper mapper)
        {
            _user = user;
            _mapper = mapper;
        }

        //api/Home
        [HttpGet]
        public IActionResult GetAllUser()
        {
            var users = _user.GetAllUser();
            if (users != null)
            {
                var userVm = _mapper.Map<List<RegisterUserVm>>(users);
                return Ok(userVm);
            }

            return Ok("Some error occured");
        }

        //api/Home
        [HttpPost]
        [Route("[action]")]
        [Route("api/Home/AddUpdateUser")]
        public IActionResult AddUpdateUser([FromBody] RegisterUserVm userVm)
        { 
            //userVm.MacAddress = GetMacAddress();
            var user = _mapper.Map<User>(userVm);
            var msg = _user.AddUser(user);
            string[] message = { "200", "testing" };
            return Ok(message);
        }

        //api/Home/{id}
        [HttpDelete]
        public IActionResult DeleteUser(Guid Id)
        {
            var msg = _user.DeleteUser(Id);
            return Ok(msg);
        }

        [HttpGet]
        [Route("[action]")]
        [Route("api/Home/GetUserById")]
        public IActionResult GetUserById(Guid Id)
        {
            var user = _user.GetUserById(Id);
            var userVm = _mapper.Map<RegisterUserVm>(user);
            if (userVm != null)
                return Ok(userVm);
            return Ok("Some error occured");
        }

        
    }

这是我的 ajax 调用

<script>
    $("#button").click(function (e) {
        e.preventDefault()
        var data = {
            name: "Ahsan",
            email: "ahsan@gmail.com",
            password: "asdsdasda"
        };
        jQuery.support.cors = true;
        $.ajax({
            type: "POST",
            dataType: 'jsonp',
            url: "https://localhost:44345/api/Home/AddUpdateUser",
            data: data,
            contentType: "application/json; charset=utf-8",
            success: function (result) {
                debugger;
                alert('ok');
            },
            error: function (result) {
                debugger;
                alert('error');
            }
        });
    });
</script>

【问题讨论】:

  • 您不能使用 JSONP 进行 POST。它根本不起作用,它会创建一个
  • 当我将 jsonp 更改为 json 。它给了我这个错误核心策略错误在这里访问来自源'localhost:44399'的 XMLHttpRequest 在'localhost:44345/api/Home/AddUpdateUser'已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:请求的资源上没有“Access-Control-Allow-Origin”标头
  • 嗨@Ahsan,我想你需要在这里查看我的答案:stackoverflow.com/questions/60875711/…。请务必在您的 web api 项目中添加 cors 支持。

标签: javascript c# asp.net-mvc asp.net-core .net-core


【解决方案1】:

把你的 ajax 改成这样:

 $.ajax({
            url: "https://localhost:44345/api/Home/AddUpdateUser",
            data: data,
             success: function (result) {
                debugger;
                alert('ok');
            },
            error: function (result) {
                debugger;
                alert('error');
            }
        });

并从您的操作标题中删除 [post] 并修复路线:

        [Route("~/api/Home/AddUpdateUser")]
        public IActionResult AddUpdateUser([FromBody] RegisterUserVm userVm)
        { 
         ....
        } 

您必须通过在启动时添加以下代码来解决 CORS 问题:

public void ConfigureServices(IServiceCollection services)
        {
            services.AddCors(o => o.AddPolicy("AllowAnyOrigins", builder =>
            {
                builder.AllowAnyOrigin()
                       .AllowAnyMethod()
                       .AllowAnyHeader();
            }));
            services.AddControllers()
            .AddNewtonsoftJson(options =>
            options.SerializerSettings.ContractResolver =
            new CamelCasePropertyNamesContractResolver());
        }

        
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            
            app.UseRouting();
            app.UseCors("AllowAnyOrigins");

            //app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
        
````

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多