是否可以在控制台应用中从 mvc 3 Web 应用获取用户 ID
本文关键字:应用 Web 获取 ID 用户 mvc 控制台 是否 | 更新日期: 2023-09-27 17:56:39
我需要从控制台应用程序中 asp.net mvc 3 应用程序获取用户 ID。这是我的代码:(mvc)
public class MembershipRepository : IMembershipRepository
{
public Guid GetUserId(string name)
{
var providerUserKey = Membership.GetUser(name).ProviderUserKey; // HttpException
if (providerUserKey != null)
return (Guid)providerUserKey;
throw new NullReferenceException("user with this username does't exist");
}
}
(控制台)代码:
ninjectKernel.Bind<IMembershipRepository>().To<MembershipRepository>();
var membershipRepository = ninjectKernel.Get<IMembershipRepository>();
Guid userId = membershipRepository.GetUserId("admin");
HttpException: 无法连接到 Sql 服务器数据库。
在异常发生之前,会弹出窗口:此程序存在兼容性问题(Microsoft SQL seqver 2008 和 2008 r2)。
我安装了sql server 2012。
此外,它只是一小块代码。在我尝试获取userId之前,我使用其他存储库将数据添加到数据库中并且它可以工作:当我检查表内容时,它充满了新条目。
我需要如何更改代码?Mabby 还有其他方法可以在控制台应用程序中获取 userId?
谢谢!
编辑:
应用配置文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add
name="WebStoreConnectionString" connectionString="Data Source=(LocalDB)'v11.0; DataBase=WebStore;
AttachDbFilename=C:'Users'Aleksey'repos'working_copy'WebStore'WebStore'App_Data'WebStore.mdf;
Integrated Security=True;Connect Timeout=30"
providerName="System.Data.SqlClient"
/>
</connectionStrings>
</configuration>
为什么不在控制器上安装一个公共方法,并在控制台应用中创建一个 Web 请求来调用该方法?
好的,它是相当通用的。
首先,您需要在控制器上安装一个需要一些参数的动作 menthod
[HttpPost]
public guid MyActionMethod(string name)
{
}
然后,您需要创建一个调用该方法的 Web 请求
UTF8Encoding encoding = new UTF8Encoding();
string messageBody = "name=myName"
byte[] requestBody = encoding.GetBytes(messageBody);
HttpWebRequest WRequest;
CredentialCache myCredCache = new CredentialCache();
myCredCache.Add(new Uri(targetUrl), "NTLM", (NetworkCredential) CredentialCache.DefaultCredentials);
WRequest = (HttpWebRequest)HttpWebRequest.Create("http://servername/controllerName/MyActionMethod/?" + messageBody);
WRequest.Credentials = myCredCache;
WRequest.UnsafeAuthenticatedConnectionSharing = true;
WRequest.PreAuthenticate = false;
WRequest.Method = "POST";
WRequest.Timeout = 10000;
WRequest.ContentLength = request.Length;
WRequest.SendChunked = true;
using (Stream requestStream = WRequest.GetRequestStream())
requestStream.Write(requestBody, 0, requestBody.Length);
我认为这是对的吗? 检查 Web 请求,我从我拥有的一些请求中复制了它,并且不得不在许多差异方法中重建它。
发生异常是因为在 MemberRepository 中使用了内置的成员资格提供程序来返回用户。我更改了影响以使用数据上下文:
public class MembershipRepository : IMembershipRepository
{
private readonly WebStoreDataContext _dataContext;
public MembershipRepository(WebStoreDataContext dataContext)
{
_dataContext = dataContext;
}
public IEnumerable<User> GetUsers()
{
return _dataContext.Users;
}
public Guid GetUserId(string name)
{
return _dataContext.Users.Where(u => u.UserName == name).Select(u => u.UserId).Single();
}
}
一切正常,我不需要使用网络请求)
因此,您可以创建 MemberRepository 的新实例或 YourAppNameDataContext 的实例(并直接使用数据上下文)