Azure Functions调用ASP.NET Membership删除用户时连接字符串配置问题
Azure Function中使用ASPNET Membership.DeleteUser时app.config连接字符串不生效的解决方案
我之前也踩过这个坑!在Azure Function环境里用传统的ASPNET Membership,确实会因为配置文件的加载逻辑和普通Web项目不一样,导致你加的app.config完全没起作用。下面给你几个亲测有效的解决思路:
改用Azure Function原生配置系统加载连接字符串
Azure Function默认认的是local.settings.json(本地开发时)或者Azure门户里的「应用程序设置」(部署后),根本不会主动读传统的app.config。你可以把Membership需要的连接字符串放到这些地方,然后在代码里手动给MembershipProvider配置连接信息:// 在Function的入口或初始化代码里添加这段 var connectionString = Environment.GetEnvironmentVariable("MembershipConnectionString"); var sqlProvider = (SqlMembershipProvider)Membership.Providers["AspNetSqlMembershipProvider"]; // 通过反射手动设置连接字符串(因为SqlMembershipProvider的连接字符串字段是非公开的) var connStringField = typeof(SqlMembershipProvider).GetField("_sqlConnectionString", BindingFlags.Instance | BindingFlags.NonPublic); connStringField?.SetValue(sqlProvider, connectionString);这种方式完全适配Azure Function的环境,后续部署和维护也更省心。
如果非要用app.config,手动强制加载配置文件
要是你坚持想用app.config,得在Function启动的时候手动加载配置文件并刷新配置节点,不过这种方式在Azure Function的沙箱环境里稳定性不如第一种:// 在Function初始化阶段执行 var configFilePath = Path.Combine(Environment.CurrentDirectory, "app.config"); var customConfig = ConfigurationManager.OpenExeConfiguration(configFilePath); ConfigurationManager.RefreshSection("connectionStrings");还要记得在项目属性里把app.config的「复制到输出目录」设置为「始终复制」,不然部署后函数环境里找不到这个文件。
检查MembershipProvider的配置节点是否完整
就算你加了app.config,也要确保里面的membership和connectionStrings节点配置没毛病,比如:<connectionStrings> <add name="LocalSqlServer" connectionString="你的数据库连接字符串" providerName="System.Data.SqlClient" /> </connectionStrings> <system.web> <membership defaultProvider="AspNetSqlMembershipProvider"> <providers> <clear/> <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="LocalSqlServer" applicationName="你的应用名称" <!-- 其他必要属性,比如enablePasswordRetrieval等按需配置 --> /> </providers> </membership> </system.web>很多时候问题出在节点缺漏,导致Membership找不到对应的Provider。
内容的提问来源于stack exchange,提问作者mangafaua
相关产品推荐
相关产品推荐

