无法使用Ajax调用asp.net Web API,并收到405和其他错误信息

时间:2018-10-15 17:09:22

标签: jquery asp.net ajax asp.net-web-api http-post

我在asp.net中制作了一个网络api来发送电子邮件并与邮递员进行了测试,那里的请求工作正常,但是当我尝试使用AJAX调用进行调用时,它给我一个'405(不允许使用方法)错误”和“对预检请求的响应未通过访问控制检查:所请求的资源上不存在” Access-Control-Allow-Origin”标头。因此,不允许访问来源“ http://localhost:11495”。

我不知道出了什么问题,我已经尝试过通过chrome扩展启用和禁用跨域资源共享,但仍然无法正常工作。我究竟做错了什么?

我正在从另一个项目中调用api,但目前两者都在localhost上。

感谢您的帮助,我已经被困了几个小时。

这是AJAX调用:

var emailObj = {};
    emailObj.Subject = timelineObj.Subject;
    emailObj.Body = timelineObj.Body;
    emailObj.SendTo = ["test@email.com"]; 
    emailObj.CCTo = [];

    $.ajax({
        type: "POST",
        async: false,
        url: "http://localhost:16627/sendemail",
        data: JSON.stringify({ emailParams: emailObj }),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            $.unblockUI();
            console.log(data.d);

        },
        error: function (data) {
            $.unblockUI();
            console.log(data.d);
            alert("An error has occurred during processing your request. [ADD EMAIL]");
        }
    });

这是api方法:

        [Route("sendemail")]
        [HttpPost]
        public string[] SendEmail(EmailParams emailParams)
        {
            using (GoalEntities db = new GoalEntities()) {

                Goal_Emails ge = new Goal_Emails();
                try
                {
                    BEMail mail = new BEMail();
                    string from = ge.SentFrom = GetParameterByName("EmailUsername").Value;
...

Screenshot of the postman test working fine

1 个答案:

答案 0 :(得分:0)

由于Mohsin的评论,我发现我没有在webapi中启用CORS。

遵循本教程https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/enabling-cross-origin-requests-in-web-api,一切正常。