asp.net Web服务中的Access-Control-Allow-Origin

时间:2017-02-02 05:42:18

标签: jquery asp.net web-services webserver cross-domain

我有2个项目一个是Asp.Net Web服务,第二个是Asp.Net Web应用程序,当我试图在同一个解决方案中运行两个项目时它运行完美但是当我们单独运行项目时(在localhost上但是有端口号) ,我收到错误)。 我很难解决这个问题,但没有完美的解决方案。

WebServiceServer:

[WebMethod]
public void CheckUserNameAndGetNew(string UserName)
{
    bool IsUserNameAvailable = true;
    DAL dal = new DAL();

    UserNameCheck objBel = new UserNameCheck();

    //IsUserNameAvailable = dal.CheckUserNameDAL(UserName);

    while(!dal.CheckUserNameDAL(UserName))   // get in if UserName already exist in database
    {
        Random myRandomNum =new Random();
        int myRandomNumber = myRandomNum.Next(1, 100);

        UserName = UserName + myRandomNumber;
        IsUserNameAvailable = false;
    }

    objBel.IsUserNameAvailable = IsUserNameAvailable;
    objBel.UserName = UserName;

    JavaScriptSerializer js = new JavaScriptSerializer();
    Context.Response.Write(js.Serialize(objBel));
}

Web服务器

$.ajax({
    url: "http://localhost:49839/WebService1.asmx/CheckUserNameAndGetNew",
    method: "Post",
    data: { UserName: txtUserName },
    dataType: "json",
    success: function (data) {
        debugger;
        var AvailableMsg = $('#AvailableMsg');
        var Availablelbl = $('#Availablelbl');
        var AvailableUserName = $('#AvailableUserName');
        if (data.IsUserNameAvailable) {
            AvailableMsg.text(txtUserName + ' User Name Available');
            Availablelbl.text('');
            AvailableUserName.text('');
            AvailableMsg.css('color', 'Green');
        }
        else {
            AvailableMsg.text(txtUserName + ' User Name is not Available');
            Availablelbl.text('Available: ');
            AvailableUserName.text(data.UserName).click(function () {
                $('#txtUserName').val($(this).text());
                AvailableMsg.text('');
                Availablelbl.text('');
                AvailableUserName.text('');
            });
            AvailableMsg.css('color', 'red');
            Availablelbl.css('color', 'Gray');
            AvailableUserName.css('color', 'green');
        }
    },
    error: function (err) {
        debugger;
    }
});

客户端侧检查控制台出错:

  

XMLHttpRequest无法加载   http://localhost:49839/WebService1.asmx/CheckUserNameAndGetNew。没有   '访问控制允许来源'标题出现在请求的上   资源。起源' http://localhost:65360'因此是不允许的   访问。

1 个答案:

答案 0 :(得分:2)

您还需要允许Web服务服务器提供跨域数据(也意味着其他的呼叫请求 - 响应)。因此,您需要在Web服务器的 web.config 中流动设置。

 <system.webServer>
 <httpProtocol>
      <customHeaders>
           <add name="Access-Control-Allow-Origin" value="*" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>