可以在localhost中访问私有文件,但不能在生产环境中访问

问题描述

我正在编写一个ASP.NET Core应用程序,并且试图使用文件的路径而不将其暴露在网络上。我将其设置为复制到输出目录,因此当我在localhost上对其进行测试时将其加载,但是在发布至Web时却给了我一个错误

apiVersion: extensions/v1beta1
kind: Ingress
Metadata:
  annotations:
    ingress.kubernetes.io/ssl-redirect: "true"
  name: ingress
spec:
  rules:
  - host: your_domain_name
    http:
    paths:
      - backend:
          serviceName: your_service_name
          servicePort: 8080
        path: /
  tls:
  - hosts:
    - your_domain_name
    secretName: tls-certificate

这是生成路径的代码

The system cannot find the file specified.

我也尝试过

Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"Config","filename.p12");

我猜Path.Combine(Environment.CurrentDirectory,"filename.p12"); AppDomain.CurrentDomain.BaseDirectory在发布时指向不同的位置吗?还是Environment.CurrentDirectory的“复制到输出目录”属性不会延续到已发布的版本?

编辑:

我也尝试过:

filename.p12

Path.Combine(environment.ContentRootPath,"file.p12"); environment的情况下,具有相同的效果。我感到文件没有被复制到发布的版本中。因此,我将在此问题中输入的文件名更改为IHostEnvironment而不是file.p12,这是我最初的意图,以防万一出于安全原因不会在该类型的文件上进行复制

解决方法

错误说The system cannot find the file specified.,但文件实际上在那儿。当我读取.p12文件时,我实际上缺少了X509KeyStorageFlags.MachineKeySet标志。我认为它在生产环境中不起作用的原因是服务器的当前用户不拥有该文件,因此我需要使用该标志指定计算机拥有该文件。