C#WebAPI身份验证

时间:2015-08-14 14:50:56

标签: c# asp.net sql-server asp.net-web-api

我很擅长构建一个web api所以请原谅我这个问题中的任何内容都是荒谬的。我的主要目标是在客户端和现有数据库之间建立Web api接口。目前,我已经设法构建了一些可以使用C#和ASP.net与SQL数据库交互的东西。我目前的问题是我正在努力进行身份验证。我花了大约3/4天来查看这个主题,试图理解它,但不幸的是,到目前为止我还没有成功。

目前我相信我目前遇到的问题是每当我尝试使用API​​注册帐户时。下面是ApplicationController

中的寄存器功能

(通过Visual Studio 2015创建项目时自动生成的内容)

// POST api/Account/Register
[AllowAnonymous]
[Route("Register")]
public async Task<IHttpActionResult> Register(RegisterBindingModel model)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    var user = new ApplicationUser() { UserName = model.Email, Email = model.Email };

    IdentityResult result = await UserManager.CreateAsync(user, model.Password);

    if (!result.Succeeded)
    {
        return GetErrorResult(result);
    }

    return Ok();
}

模型状态很好但是:

IdentityResult result = await UserManager.CreateAsync(user, model.Password);

始终返回false。

我认为这是由于与成员资格数据库的数据库连接存在一些问题。在调查之后我发现我的项目或我的localhost sql server中没有这样的数据库。在线发现如何创建会员数据库(使用regsql.exe)。所以,我创建了成员资格数据库,将它放到我的sql2008rs localhost服务器上并更改项目web.config文件中的连接字符串

<add name="DefaultConnection" 
connectionString="Data Source=localhost\sql2008r2;Initial Catalog=SecurityDatabase;Integrated Security=True;" 
providerName="System.Data.SqlClient" />

认为这就是我需要做的才能让它发挥作用我尝试测试它,仍然无法正常工作。然后在SQL SMS中使用Sql Server探查器我运行跟踪以查看发送的SQL

exec sp_executesql N'SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME=@Table',N'@Table nvarchar(11)',@Table=N'AspNetUsers'

发送的内容让我在很多层面上感到困惑。首先,为什么在我尝试注册新用户时发送select语句,其次为什么它试图从不存在的表中进行选择?没有AspNetUser,但有一个Aspnet_user表。

我假设某条线上的地方我已经非常错误并且对这一切都不熟悉我确信我犯了一些非常愚蠢的错误但我花了很多时间寻找信息和帮助所有我可以找到关于MVC或Webforms的模糊内容,似乎只是说当你运行应用程序时,会员数据库是由魔术创建的。

下面是SQL SMS中对象资源管理器的屏幕截图,显示了现有数据库及其表 http://i.imgur.com/cQCaHRP.png

1 个答案:

答案 0 :(得分:0)

我是愚蠢的。感谢Sam Farajpour指出我没有意识到结果有其他属性的纯粹愚蠢,我遇到的错误是我不知道的一些密码要求,现在已经解决了我的问题。

我从中学到了什么?检查一切,两次,然后完全检查三次。

我怀疑其他人会遇到与我相同的问题,但如果有人这样做,请检查结果对象并查看其属性。有一个字符串数组,其中包含错误信息(如果有)。你可以从那里轻松搞清楚。