子域webapi(asp.net mvc)响应直接请求,但不响应来自同一域的请求

时间:2020-06-27 11:11:59

标签: asp.net-web-api

  • 网站:domain.com
  • Api:api.domain.com

如果我直接向localhost api请求,它将正常工作。 如果我直接向托管的api请求,它将正常运行。 但是,如果我从同一域中的网站发出请求,则无法正常运行

当我从网站向使用相同api的另一个托管域发出请求时,它也起作用。 我也尝试了一个带有javascript请求的网站。首先,我没有工作,但是在添加<add name="Access-Control-Allow-Origin" value="*" />之后,它确实可以工作。

很明显,问题与子域有关。如何执行相同域的网站请求以获取控制器的响应?看起来与路由有关。

谢谢

1 个答案:

答案 0 :(得分:0)

感谢您的建议。

我尝试设置CORS设置。我遵循这份文件(https://docs.microsoft.com/tr-tr/aspnet/web-api/overview/security/enabling-cross-origin-requests-in-web-api

我忘了说我的第一篇文章。网站(https://domain.com.tr)适用于https,而api(http://api.domain.com.tr)适用于http

这些步骤已应用

  1. config.EnableCors();添加了webapi项目
  2. [EnableCors(origins: "https://domain.com.tr", headers: "*", methods: "*")]在webapi项目的ValuesController顶部添加了ApiController

然后我从其他项目https://domain.com.tr发出请求,但再次失败,这是我的下面的代码

        /***NOT WORK***/  
        string apiUrl = "http://api.domain.com.tr/api/";
        /***WORK PROPERLY***/  
        //string apiUrl = "http://otherdomain.com/api/";
        /***WORK PROPERLY***/  
        //string apiUrl = "http://localhost:57232/api/";

        IEnumerable<Modul> students = null;

        using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri(apiUrl);
            //HTTP GET
            var responseTask = client.GetAsync("GetPages");
            responseTask.Wait();
            /***AFTER THİS LINE GIVE ERROR***/
            var result = responseTask.Result;

在此处输入图片描述