gpt4 book ai didi

c# - MVC项目在同一Docker容器中使用Web API项目

转载 作者:行者123 更新时间:2023-12-02 20:01:39 26 4
gpt4 key购买 nike

我想在业余时间学习有关Docker的更多信息。我目前正在尝试使ASP.NET Identity Server与之一起使用。

这是我已采取的步骤:

  • 下载:https://github.com/IdentityServer/IdentityServer4.Samples/tree/release/Quickstarts/6_AspNetIdentity
  • 运行ASP.NET MVC客户端应用程序和服务器应用程序,并浏览到以下URL以确保其正常运行:http://localhost:5002/Home/CallApiUsingClientCredentials

    代码如下:
    public async Task<IActionResult> CallApiUsingClientCredentials()
    {
    var tokenClient = new TokenClient("http://localhost:5000/connect/token", "mvc", "secret");
    var tokenResponse = await tokenClient.RequestClientCredentialsAsync("api1");

    var client = new HttpClient();
    client.SetBearerToken(tokenResponse.AccessToken);
    var content = await client.GetStringAsync("http://localhost:5001/identity");

    ViewBag.Json = JArray.Parse(content).ToString();
    return View("Json");
    }

    我得到了期望的答复。
  • 右键单击API项目,然后选择“添加容器编排支持”。
  • 右键单击MVCClient,然后选择:添加/容器编排支持。

  • Docker Compose Override然后看起来像这样:
    version: '3.4'

    services:
    mvcclient:
    environment:
    - ASPNETCORE_ENVIRONMENT=Development
    ports:
    - "5002:80"

    api:
    environment:
    - ASPNETCORE_ENVIRONMENT=Development
    ports:
    - "5001:80"


    identityserverwithaspnetidentity:
    environment:
    - ASPNETCORE_ENVIRONMENT=Development
    ports:
    - "5000:80"

    对上面的代码进行如下更改:

    第3行更改为:
    var tokenClient = new TokenClient("http://identityserverwithaspnetidentity:80/connect/token", "mvc", "secret");

    第10行更改为:
    var content = await client.GetStringAsync("http://api:80/Identity");

    当我浏览到 http://localhost:5002/Home/CallApiUsingClientCredentials时;我收到一个奇怪的答复:
    <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"><html><head><meta http-equiv=\"refresh\" content=\"0;url=http://www.webaddresshelp.bt.com/main?ParticipantID=mg76cjr54t8kx45jjw4j4k9j5hsr5m26&FailedURI=http%3A%2F%2Fapi1%2FIdentity&FailureMode=1&Implementation=&AddInType=4&Version=pywr1.0&ClientLocation=uk\"/><script type=\"text/javascript\">url=\"http://www.webaddresshelp.bt.com/main?ParticipantID=mg76cjr54t8kx45jjw4j4k9j5hsr5m26&FailedURI=http%3A%2F%2Fapi1%2FIdentity&FailureMode=1&Implementation=&AddInType=4&Version=pywr1.0&ClientLocation=uk\";if(top.location!=location){var w=window,d=document,e=d.documentElement,b=d.body,x=w.innerWidth||e.clientWidth||b.clientWidth,y=w.innerHeight||e.clientHeight||b.clientHeight;url+=\"&w=\"+x+\"&h=\"+y;}window.location.replace(url);</script></head><body></body></html>

    请问是什么问题?

    更新

    为什么下面的行返回上面的输出(我称之为怪异的响应):
    var content = await client.GetStringAsync("http://bert:80/Identity");
    var content = await client.GetStringAsync("http://somerandomserver:80/Identity");
    var content = await client.GetStringAsync("http://hello:80/Identity");

    伯特somerandomserver和hello不存在。看起来只要我使用端口80即可始终收到上述响应,即无论我使用的服务器名称是什么,我都可以弥补。为什么?

    最佳答案

    对于docker compose中的Web应用程序,它们正在Compose中共享相同的网络。

    按照您的步骤,似乎您只更改了请求URL。您还需要在api项目中更改Authority

    尝试使用以下方式更改src\Api\Startup.cs:

                services.AddAuthentication("Bearer")
    .AddIdentityServerAuthentication(options =>
    {
    options.Authority = "http://identityserverwithaspnetidentity:80";
    options.RequireHttpsMetadata = false;

    options.ApiName = "api1";
    });

    关于c# - MVC项目在同一Docker容器中使用Web API项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53091110/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com