Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建项目时不进行身份验证时的ASP.NET标识集成_C#_Asp.net Mvc_Authentication_Identity - Fatal编程技术网

C# 创建项目时不进行身份验证时的ASP.NET标识集成

C# 创建项目时不进行身份验证时的ASP.NET标识集成,c#,asp.net-mvc,authentication,identity,C#,Asp.net Mvc,Authentication,Identity,我有一个身份问题,我不是很熟悉。不久前,我启动了一个新项目,它原本不打算附加任何身份验证。然而,随着项目的发展,我们发现我们应该实施它。因为它最初不是这样设置的,所以我创建了一个登录表单 我找到了这个问题的答案并实施了它: 但是它不起作用,我不知道为什么 这是我的密码: 这里没什么可看的,只是一个简单的形式 @{ ViewBag.Title = "Login"; } <div class="container"> <h2>Login</h2>

我有一个身份问题,我不是很熟悉。不久前,我启动了一个新项目,它原本不打算附加任何身份验证。然而,随着项目的发展,我们发现我们应该实施它。因为它最初不是这样设置的,所以我创建了一个登录表单

我找到了这个问题的答案并实施了它:

但是它不起作用,我不知道为什么

这是我的密码:

这里没什么可看的,只是一个简单的形式

@{
    ViewBag.Title = "Login";
}

<div class="container">

<h2>Login</h2>

<br />

@using (Html.BeginForm("Login", "Main"))
{
    <div class="row">
        <div class="form-group col-xs-6">
            @Html.Label("Username", htmlAttributes: new { @class = "control-label col-sm-3" })
            <div class="col-sm-8">
                @Html.TextBox("username", null, new { @class = "form-control" })
                @*Html.ValidationMessageFor(model => model.EnrollmentOption, "", new { @class = "text-danger" })*@
            </div>
        </div>

        <div class="form-group col-xs-6">
        </div>

    </div>

    <div class="row">
        <div class="form-group col-xs-6">
            @Html.Label("Password", htmlAttributes: new { @class = "control-label col-sm-3" })
            <div class="col-sm-8">
                @Html.Password("password", null, new { @class = "form-control" })
                @*Html.ValidationMessageFor(model => model.EffectiveDate, "", new { @class = "text-danger" })*@
            </div>
        </div>

        <div class="form-group col-xs-6">
        </div>

    </div>

    <div class="row">
        <div class="form-group">
            <div class="col-md-offset-6 col-sm-5">
                <input type="submit" id="login" value="Sign in" class="btn btn-primary" />
            </div>
        </div>
    </div>
}
还有isLoginValid函数(目前设置为使用硬编码登录)

我不太了解这种说法,也不知道身份在其背后是如何运作的。不过,我确实添加了所有必要的参考资料。在登录重定向后对我的操作使用authorize属性时,我收到来自IIS的未经授权的请求。我的代码有问题吗

我应该更改或修复什么才能使用身份的授权部分


谢谢,

经过一些故障排除,多亏了盖谢尔曼的评论,我才找到了解决方案。由于我在创建解决方案时没有考虑身份验证,因此我删除了App_Start文件夹中包含的引用和必要的OWIN配置代码

因此,尽管登录工作正常,但标识中没有定义任何内容,授权部分也没有出现任何内容。通过创建一个新项目并添加配置标识所需的所有代码,我能够正确地使用Authorize属性。没有任何问题

(这个答案适用于ASP.NET 4.6,我想对ASP.NET核心的处理方式有所不同)

更新:

为了更好地回答这个问题,我想我应该更详细地说明我做了些什么使它起作用

当使用identity创建一个新项目时,您将看到有几个文件没有创建。如果您选择不添加它,您将需要这些文件,其中大部分存储在App_Start中

我复制了我没有的文件,并更改了名称空间以匹配我的实际项目。一旦这样做了,我就可以清楚地看到我遗漏了哪些nuget包,所以我添加了那些我还没有添加的包

Startup.Auth.cs将定义一个键函数,以便标识正常工作:

配置身份验证

必须在startup类中调用此函数。在配置方法中

最后,要使一切正常工作,还必须包括通常在Models文件夹中创建的文件IdentityModel.cs。在我的例子中,我将所有模型放在一个不同的项目中,因此我将该类放在那里,并在IdentityConfig.cs上添加引用,以便该类能够识别IdentityModel的存在


就这些。在我的例子中,我的identity在尝试连接到db以查找用户时遇到了很多问题,因为identity没有配置数据库,我的应用程序由于db连接失败而开始崩溃。删除第三幅图中标有红色的线条对我来说很有用。我不想要identity的db连接,因为我有自己的用户处理,这可能不是其他人的情况。

经过大量调试,感谢@Carlos提供了详细的答案。如果项目是在“无身份验证”的情况下创建的,则需要添加身份验证所需的缺少的Nuget包

您需要安装以下软件

Microsoft.AspNet.Identity
Microsoft.AspNet.Identity.EntityFramework
Microsoft.AspNet.Identity.Owin
Microsoft.Owin.Host.SystemWeb
Microsoft.Owin.Security

如果有不喜欢的地方,最好知道原因,请至少留下评论。检查Startup.cs文件,您应该在ConfigureServices方法中调用services.additionIdentity(…),同样,在Configure方法中也应该调用app.UseIdentity(…)。我的建议是生成带有身份验证的示例应用程序,并与您拥有的进行比较。但您似乎没有注入服务。@guysherman,这是针对ASP.Net Core的,而不是针对MVC5的,这正是这个问题所涉及的。尽管如此,检查时我注意到我缺少了一些OWIN配置文件,我认为这些文件是Identity正常工作所必需的。@DavidG在这种情况下,文件是App_Startup中的Startup.Auth.cs,可能是OWIN调用丢失了。FWIW,在这种情况下,最好的做法是简单地使用单个auth创建一个新项目,然后将需要的代码复制到应用程序中。这样,你就不会错过这样的事情。在没有参考项目的情况下,很难正确地设置像Identity这样的东西。这就是我最后所做的,也许我应该在我的回答中澄清这一点。
    [NonAction]
    private bool isLoginValid(string user, string password)
    {
        return (user.ToLower() == "someUser" && password.ToLower() == "myPassword");
    }
Microsoft.AspNet.Identity
Microsoft.AspNet.Identity.EntityFramework
Microsoft.AspNet.Identity.Owin
Microsoft.Owin.Host.SystemWeb
Microsoft.Owin.Security