【问题标题】:Asp.net core 2.0 PostAsync fails on IIS 7.5Asp.net core 2.0 PostAsync 在 IIS 7.5 上失败
【发布时间】:2018-03-09 05:06:55
【问题描述】:

在 Visual Studio 2017 RC 上运行时一切正常,但部署到 IIS 时失败。

代码,

    private void ConnectApi()
    {
        var jsonCredentials = new
        {
            username = AppSettings.ApiUserName,
            password = AppSettings.ApiPassword,
            hostName = AppSettings.ApiHostName
        };

        var request = new StringContent(JsonConvert.SerializeObject(jsonCredentials), Encoding.UTF8, "application/json");           
        var url = string.Format("{0}", AppSettings.Api_BaseUrl + AppSettings.Api_Authenticate);
        using (var client = new HttpClient())
        {
            var response = client.PostAsync(new Uri(url), request).Result;
            response.EnsureSuccessStatusCode();
            if (response.IsSuccessStatusCode)
            {
                var responseBody = response.Content.ReadAsStringAsync().Result;
                string authorizationToken = string.Empty;
                if (!string.IsNullOrEmpty(responseBody))
                {
                    dynamic jsonContent = JsonConvert.DeserializeObject(responseBody);
                    AccessToken = jsonContent["authorizationToken"];
                }
            }
        }
    }

这里是异常详情,

var response = client.PostAsync(new Uri(url), request).Result;

System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.Http.WinHttpException: Access is denied
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Threading.Tasks.RendezvousAwaitable`1.GetResult()
   at System.Net.Http.WinHttpHandler.<StartRequest>d__105.MoveNext()
   --- End of inner exception stack trace ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
   at System.Net.Http.HttpClient.<FinishSendAsyncBuffered>d__58.MoveNext()

有什么想法吗?

【问题讨论】:

  • 我注意到尝试在 ASP.NET Core 上进行异步操作 Result 效果不佳。也许将您的方法更改为 async 会有所帮助。
  • 根据异常文本 Access is denied 以及您填充凭据的方式,如果发布到 IIS,您似乎在 AppSettings 中有错误的凭据值。向我们展示您如何填充AppSettings
  • 真的需要了解异步编程的工作原理:docs.microsoft.com/en-us/dotnet/csharp/async
  • @ChrisPratt 是的,现在你能告诉我如何改变我上面的代码来解决这个问题吗?
  • 正确使用异步

标签: .net asp.net-core .net-core iis-7.5


【解决方案1】:

将应用程序池标识从 ApplicationPoolIdentity 更改为 NetworkService 解决了该问题。

任何专业知识都可以解释是什么解决了问题?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-28
    • 2011-01-23
    • 1970-01-01
    相关资源
    最近更新 更多