找到两种方法来解决这个问题。
1) 覆盖 UrlHelper
public class HttpsUrlHelper : UrlHelper {
public HttpsUrlHelper(ActionContext actionContext)
: base(actionContext) {
}
protected override string GenerateUrl(string protocol, string host, VirtualPathData pathData, string fragment) {
return base.GenerateUrl("https", host, pathData, fragment);
}
}
public class ForcedHttpsUrlHelperFactory : IUrlHelperFactory {
public IUrlHelper GetUrlHelper(ActionContext context) {
return new HttpsUrlHelper(context);
}
}
需要在Startup.cs中注册
services.AddSingleton<IUrlHelperFactory, ForcedHttpsUrlHelperFactory>();
2) 为动作 Result 创建新类。您还需要实现自己的 CreatedAtRoute 函数,该函数将返回 HttpsCreatedAtRouteResult 的实例。
public class HttpsCreatedAtRouteResult : CreatedAtRouteResult {
public HttpsCreatedAtRouteResult(object routeValues, object value)
: base(routeValues, value) {
}
public HttpsCreatedAtRouteResult(string routeName, object routeValues, object value)
: base(routeName, routeValues, value) {
}
public override void OnFormatting(ActionContext context) {
base.OnFormatting(context);
var url = context.HttpContext.Response.Headers[HeaderNames.Location];
// do with url whatever you need
context.HttpContext.Response.Headers[HeaderNames.Location] = url;
}
}