0

我正在尝试自定义 Visal Studio 项目提供的“默认身份验证”。我有一个数据库,里面有一些用户链接到我的项目。我想要做的:确保登录名/密码对在数据库中,因此连接用户。

只是为了让您了解已完成的工作:AccountController:

 [HttpPost]
 [AllowAnonymous]
 [ValidateAntiForgeryToken]
 public ActionResult Login(LoginModel model, string returnUrl)
 {
    try
    {
        var context = new MyService.MyEntities2(new Uri("http://localhost:12345/MyWS.svc/"));
        var usr = from user in context.PERSON
                  where user.LOGIN == model.UserName && user.PASSWORD == model.Password
                  select user;
        List<MyWebPortal.MyService.PERSON> lpers = usr.ToList();
        int nbRes = lpers.Count();
        if (ModelState.IsValid && nbRes ==1)
        {
            return RedirectToLocal(returnUrl);
        }
    }
    catch (DataServiceQueryException ex)
    {
        ModelState.AddModelError("", "Erreur : "+ex.ToString());
    }
    ModelState.AddModelError("", "Authentication error");
    return View(model);
}

登录型号:

public class LoginModel
    {
        [Required]
        [Display(Name = "User name")]
        public string UserName { get; set; }

        [Required]
        [DataType(DataType.Password)]
        [Display(Name = "Password")]
        public string Password { get; set; }
    }

登录表单 :

@using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl })) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)

<fieldset>
    <ol>
        <li>
            @Html.LabelFor(m => m.UserName)
            @Html.TextBoxFor(m => m.UserName)
            @Html.ValidationMessageFor(m => m.UserName)
        </li>
        <li>
            @Html.LabelFor(m => m.Password)
            @Html.PasswordFor(m => m.Password)
            @Html.ValidationMessageFor(m => m.Password)
        </li>
    </ol>
    <input type="submit" value="Login" />

但我有以下错误:

System.Data.Services.Client.DataServiceQueryException: Une erreur s'est produite lors du traitement de cette requête. ---> System.Data.Services.Client.DataServiceClientException: <?xml version="1.0" encoding="utf-8" standalone="yes"?><error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"><code></code><message xml:lang="fr-FR">Une erreur s'est produite lors du traitement de cette requête.</message></error> 
à System.Data.Services.Client.QueryResult.ExecuteQuery(DataServiceContext context) 
à System.Data.Services.Client.DataServiceRequest.Execute[TElement](DataServiceContext context, QueryComponents queryComponents) 
--- Fin de la trace de la pile d'exception interne --- 
à System.Data.Services.Client.DataServiceRequest.Execute[TElement](DataServiceContext context, QueryComponents queryComponents) 
à System.Data.Services.Client.DataServiceQuery`1.Execute() 
à System.Data.Services.Client.DataServiceQuery`1.GetEnumerator() 
à System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) 
à System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) 
à MyApp.Controllers.AccountController.Login(LoginModel model, String returnUrl) dans d:\....\Documents\Visual Studio 2012\Projects\MyProg\MyWS\Controllers\AccountController.cs:ligne 45

45 号线在哪里

List<MyWebPortal.MyService.PERSON> lpers = usr.ToList();

我的请求做错了吗?谢谢 !

4

1 回答 1

0

好的,它现在正在工作。我做了什么:我只是添加了这一行:

var context = new SteelcaseService.SteelcaseEntities2(new Uri("http://localhost:12345/Steelcase.svc/"));
----> var persons = context.PERSON.ToList();
var usr = from user in persons
          where user.LOGIN == model.UserName && user.PASSWORD == model.Password
          select user;

请你解释一下为什么?因为这不是我第一次使用这个技巧,我不知道为什么它会改变任何东西。同时,如果我有很多信息要恢复,我认为这不是一个好主意。

于 2013-06-26T08:50:10.547 回答