我正在向服务器发送 post 方法但接收 get 方法

时间:2021-02-18 08:31:28

标签: javascript .net asp.net-mvc api asp.net-core

我正在研究 .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=asds5553R>net&password=asds1553R15555R155555R153R

这是我的 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>

1 个答案:

答案 0 :(得分:0)

把你的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();
            });
        }
        
````
相关问题