标签: asp.net-mvc-5

更新用户数据 - ASP.NET标识

我已经在ApplicationUser课程中添加了自定义字段,
我还创建了一个表单,用户可以通过该表单输入/编辑字段.
但由于某种原因,我无法更新数据库中的字段.

[HttpPost]
[ActionName("Edit")]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Manage(EditProfileViewModel model)
{
    if (ModelState.IsValid)
    {
        // Get the current application user
        var user = User.Identity.GetApplicationUser();

        // Update the details
        user.Name = new Name { First = model.FirstName, Last = model.LastName, Nickname = model.NickName };
        user.Birthday = model.Birthdate;

        // This is the part that doesn't work
        var result = await UserManager.UpdateAsync(user);

        // However, it always succeeds inspite of not updating the database
        if (!result.Succeeded)
        {
            AddErrors(result);
        }
    }

    return …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc asp.net-mvc-5 asp.net-identity

69
推荐指数
4
解决办法
9万
查看次数

什么/为什么Roslyn"需要"在Asp.Net的/ bin文件夹中

虽然大多数答案定义了 Roslyn和/或为某些问题提供了"修复"(与托管服务提供商等),但是有很多相关的问题.exe

我似乎无法追查的是"为什么"和"为什么"(可能仅在ASP.Net MVC/Web API的上下文中)/bin/roslyn.

我遇到了类似的问题(托管 - .exe限制,支持4.6等),我的"修复"是"只是部署到Azure"(当然一切都顺利).但实际上,这并没有回答:

  • 他们为什么需要?
  • 这是否意味着他们用于runtime编译(我的大脑指向这个,但这是一个完整的猜测/我可能是错误的grok),正如这篇SO帖子所示 - 除非纠正,这是"它"(更多下面).
  • 似乎"删除包"是一个"修复" (基于一些过去的答案),但如果是这样,它(重新)回答问题

我认为理解这一点会有所帮助 - 例如,我不可能是唯一一个会看到.exe"需要" 的眉毛......


更新

去表明存在"隐藏的宝石":)我已经一遍又一遍地阅读 ......毕竟它已经存在了一段时间 - 但不是评论主题.大错 - 它一直盯着我(或者至少从这次交换开始):

Dmitry Dzygin 2015年6月2日12:53 AM

我已经尝试了最新版本的NuGet包,但是编译器加载/执行的方式似乎有所不同.

在v0.2.0.0中,Roslyn编译器将被加载到内存中,从而大大提高了多个*.as*x/*.cshtml文件的预编译网站的性能.然而,新版本具有一个新/bin/roslyn/csc.exe文件,每个文件执行一次,完全删除上述优化功能.....

金:

XMao 2015年6月2日下午1:22

@Dmitry的的工作csc.exe/bin/Roslyn是调用VBCSCompiler.exe,在同一文件夹它坐落.VBCSCompiler.exe 是进行实际编译工作的过程.如果VBCSCompiler已在运行,csc.exe将重用它,因此我们仍将获得上述性能提升.

心连心...


更新:10/2017

似乎这是相关的所有这一次所以进一步更新.

@Donny V下面答案是一个选项.通过完全编译您的应用程序,包括所有Views …

roslyn asp.net-web-api asp.net-mvc-5

69
推荐指数
3
解决办法
5万
查看次数

ASP.NET MVC 5是否与WebMatrix SimpleMembershipProvider不兼容?

我们有一个基于ASP.NET MVC 4和Web API的现有应用程序.该网站的管理部分使用简单成员资格.我有兴趣将应用程序升级到MVC 5/Web API 2,以利用已添加的一些新功能.但看起来它们可能不兼容.

具体来说,在将NuGet中的RC包安装到我的解决方案中的一个项目中并更新web.config信息之后,应用程序在启动期间开始在调用的行上死亡WebSecurity.InitializeDatabaseConnection(),但有以下异常:

[MethodAccessException: Attempt by security transparent method 'WebMatrix.WebData.PreApplicationStartCode.OnConnectionOpened(System.Object, WebMatrix.Data.ConnectionEventArgs)' to access security critical method 'System.Web.WebPages.HttpContextExtensions.RegisterForDispose(System.Web.HttpContextBase, System.IDisposable)' failed.]
   WebMatrix.WebData.PreApplicationStartCode.OnConnectionOpened(Object sender, ConnectionEventArgs e) +70
   WebMatrix.Data.Database.OnConnectionOpened() +70
   WebMatrix.Data.Database.EnsureConnectionOpen() +51
   WebMatrix.Data.Database.QueryValue(String commandText, Object[] args) +63
   WebMatrix.WebData.DatabaseWrapper.QueryValue(String commandText, Object[] parameters) +13
   WebMatrix.WebData.SimpleMembershipProvider.GetUserId(IDatabase db, String userTableName, String userNameColumn, String userIdColumn, String userName) +206
   WebMatrix.WebData.SimpleMembershipProvider.ValidateUserTable() +87
Run Code Online (Sandbox Code Playgroud)

使用我尚未升级的简单成员资格的同一解决方案中的其他项目继续正常工作.

当然,谷歌搜索更多信息会引发大量的点击,但WebMatrix没什么特别的.

FWIW:我知道Microsoft已经引入了(又一个)成员身份和身份解决方案,但除非有一种方法可以将其用于现有的简单成员资格表,或者是我们所有现有用户数据的无缝迁移路径,这不是一个真正的选择为了我们.

更新(10月11日)

我刚刚尝试了一下我们应用程序当前主干的新结帐.我正在使用Visual Studio 2012,但是按照MS的说明升级现有项目.更新到MVC 5/Web API 2/EF 6后,该应用程序启动运行就好了.

web.config删除中没有明确的信任要求.我加入了代码这个问题Global.asax.cs …

c# asp.net-mvc simplemembership asp.net-mvc-5 asp.net-identity

68
推荐指数
2
解决办法
4万
查看次数

如何在Microsoft.AspNet.Identity.EntityFramework.IdentityUser中更改id的类型

(ASP.NET MVC 5,EF6,VS2013)

我试图弄清楚如何在类型中将"Id"字段的类型从字符串更改为int:

Microsoft.AspNet.Identity.EntityFramework.IdentityUser
Run Code Online (Sandbox Code Playgroud)

为了使新用户帐户与整数ID而不是GUID相关联.但似乎这比在我的派生用户类中简单地添加类型为int的新Id属性更复杂.看看这个方法签名:

(来自程序集Microsoft.AspNet.Identity.Core.dll)

public class UserManager<TUser> : IDisposable where TUser : global::Microsoft.AspNet.Identity.IUser
  {
  ...
  public virtual Task<IdentityResult> AddLoginAsync(string userId, UserLoginInfo login);
  ...
  }
Run Code Online (Sandbox Code Playgroud)

因此,似乎ASP.NET身份框架中还有其他方法要求userId为字符串.我还需要重新实现这些课程吗?

解释为什么我不想在用户表中存储id的GUID:

- 将有其他表通过外键将数据与users表相关联.(当用户在网站上保存内容时.)我认为没有理由使用较大的字段类型并花费额外的数据库空间而没有明显的优势.(我知道还有其他关于使用GUID和int ID的帖子,但似乎有很多人建议int id更快并且使用更少的空间,这仍然让我感到疑惑.)

- 我计划公开一个restful端点,以允许用户检索有关特定用户的数据.我认为:

/users/123/name
Run Code Online (Sandbox Code Playgroud)

比...更干净

/users/{af54c891-69ba-4ddf-8cb6-00d368e58d77}/name
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么ASP.NET团队决定以这种方式实现ID?在尝试将其更改为int类型时,我是否只是短视?(也许我缺少一些好处.)

谢谢...

-ben

asp.net-mvc entity-framework owin asp.net-mvc-5 asp.net-identity

66
推荐指数
3
解决办法
4万
查看次数

没有OWIN身份验证管理器与请求关联

在尝试为我的Web Api项目启用owin和AspNet Identity(在VS 2013 + .Net 4.5.1中)后,我在每个有效或无效(请求到无存在的控制器)请求中收到以下错误:

<Error>
<Message>An error has occurred.</Message>
<ExceptionMessage>
No OWIN authentication manager is associated with the request.
</ExceptionMessage>
<ExceptionType>System.InvalidOperationException</ExceptionType>
<StackTrace>
at System.Web.Http.Owin.PassiveAuthenticationMessageHandler.SuppressDefaultAuthenticationChallenges(HttpRequestMessage request) at System.Web.Http.Owin.PassiveAuthenticationMessageHandler.<SendAsync>d__0.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() at System.Web.Http.HttpServer.<SendAsync>d__0.MoveNext()
</StackTrace>
</Error>
Run Code Online (Sandbox Code Playgroud)

当我在调试模式下检查时,也没有处理任何异常!我也意识到ConfigurationStartup课堂上永远不会被调用(实际上从未被调试器捕获过).这是启动代码:

[assembly: OwinStartup(typeof(bloob.bloob.Startup))]

namespace bloob.bloob
{
    public partial class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            ConfigureAuth(app);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

windows-authentication owin asp.net-mvc-5

66
推荐指数
5
解决办法
4万
查看次数

ASP.NET MVC5 OWIN Facebook身份验证突然无法正常工作

2017年更新!

我在发布原始问题时遇到的问题与Facebook最近在强迫每个人使用其API版本2.3时所做的更改无关.有关该特定问题的解决方案,请参阅下面的sammy34的答案./ oauth/access_token端点的2.3版现在返回JSON而不是表单编码的值

由于历史原因,这是我原来的问题/问题:

我有一个MVC5 Web应用程序,它使用内置支持通过Facebook和Google进行身份验证.几个月前我们构建这个应用程序时,我们遵循了这个教程:http://www.asp.net/mvc/tutorials/mvc-5/create-an-aspnet-mvc-5-app-with-facebook-and -google-oauth2-and-openid-sign-on,一切都很棒.

现在,突然之间,Facebook身份验证刚刚停止工作.Google身份验证仍然有效.

问题描述:我们点击链接使用Facebook连接,我们被重定向到Facebook,如果我们不允许我们的Facebook应用访问我们的个人资料,我们会被提示.当我们点击"确定"时,我们会被重定向回我们的网站,但我们只是登录屏幕而不是登录.

我已经在调试模式下完成了这个过程,并且根据上面提到的教程,我在我的帐户控制器中有了这个ActionResult:

// GET: /Account/ExternalLoginCallback
[AllowAnonymous]
public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
{
    var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
    if (loginInfo == null)
    {
        return RedirectToAction("Login");
    }
    ............
Run Code Online (Sandbox Code Playgroud)

当单步执行代码并从Facebook返回时,loginInfo对象始终为NULL,这会导致用户重定向回登录.

为了理解幕后实际发生的事情,我安装了Fiddler并监控HTTP流量.我发现的是,在Facebook权限对话框中单击"确定"后,Facebook会使用以下URL重定向回我们的应用程序:

https://localhost/signin-facebook?code=<access-token>
Run Code Online (Sandbox Code Playgroud)

这个URL不是一个实际的文件,可能是由我猜测的这个OWIN框架内置的一些控制器/处理程序处理的.最有可能的是,它使用给定的代码连接回Facebook,以查询有关尝试登录的用户的信息.现在,问题是我们被重定向到:而不是这样做:

/Account/ExternalLoginCallback?error=access_denied
Run Code Online (Sandbox Code Playgroud)

我确信这是Facebook正在做的事情,也就是说,它不是向我们提供用户数据,而是通过此错误消息重定向我们.

这会导致AuthenticationManager.GetExternalLoginInfoAsync();失败并始终返回NULL.

我完全没有想法.据我们所知,我们没有改变任何事情.

我已经尝试创建一个新的Facebook应用程序,我已经尝试过再次使用该教程,但我总是遇到同样的问题.

欢迎任何想法!

更新!

好的,这让我疯了!我现在已经手动完成了执行身份验证所需的步骤,当我这样做时,一切都很顺利.为什么在使用MVC5 Owin的东西时这不起作用?

这就是我做的:

    // Step 1 - Pasted this into a browser, this returns a code
    https://www.facebook.com/dialog/oauth?response_type=code&client_id=619359858118523&redirect_uri=https%3A%2F%2Flocalhost%2Fsignin-facebook&scope=&state=u9R1m4iRI6Td4yACEgO99ETQw9NAos06bZWilJxJrXRn1rh4KEQhfuEVAq52UPnUif-lEHgayyWrsrdlW6t3ghLD8iFGX5S2iUBHotyTqCCQ9lx2Nl091pHPIw1N0JV23sc4wYfOs2YU5smyw9MGhcEuinvTAEql2QhBowR62FfU6PY4lA6m8pD3odI5MwBYOMor3eMLu2qnpEk0GekbtTVWgQnKnH6t1UcC6KcNXYY

I was redirected back to localhost (which I had shut …
Run Code Online (Sandbox Code Playgroud)

facebook owin asp.net-mvc-5

66
推荐指数
3
解决办法
2万
查看次数

脚手架控制器不适用于visual studio 2013 update 2

问题:

我已更新到Visual Studio 2013更新2,现在我无法使用脚手架控制器.

问题不是项目特定的:当我尝试脚手架控制器时,我在ALL和ANY项目中收到以下错误:

There was an error running the selected code generator:
'Exception has been thrown by the target of an invocation.'
Run Code Online (Sandbox Code Playgroud)

它在更新到Visual Studio 2013更新2之前正在工作.

用谷歌搜索了这个问题,但各种建议都没有奏效

例如:

  1. 在我的上下文中评论OnModelCreating;

  2. 删除MvcScaffolding等软件包(我没有安装,也不能用于任何项目);

我已经修改/定制了一些模板,但它在更改后正在运行.

编辑:

我卸载了Visual Studio 2013 Update 2,从而恢复到Visual Studio版本12.0.21005.1 REL.

问题已经消失.因此,问题肯定与Update 2有关.

题:

有没有人(包括微软)知道修复?

编辑2:

Farruk Subhani的回答没有解决这个问题:问题清楚地表明删除对MVCScaffolding的引用并不能解决问题.

我已经添加了200点奖金,请按照明确说明的方式解决问题.

asp.net-mvc-scaffolding visual-studio-2013 asp.net-mvc-5

65
推荐指数
3
解决办法
5万
查看次数

Razor文件中的IntelliSense(.cshtml)停止工作

Intellisense在剃刀文件中不起作用:

在此输入图像描述

在我的web.conifg文件中(在Views文件夹中)显然是正确的:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <configSections>
        <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
            <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
            <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
        </sectionGroup>
    </configSections>

    <system.web.webPages.razor>
        <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <pages pageBaseType="System.Web.Mvc.WebViewPage">
            <namespaces>
                <add namespace="System.Web.Mvc" />
                <add namespace="System.Web.Mvc.Ajax" />
                <add namespace="System.Web.Mvc.Html" />
                <add namespace="System.Web.Routing" />
                <add namespace="System.Web.Optimization" />

                <add namespace="MvcSiteMapProvider.Web.Html" />
                <add namespace="MvcSiteMapProvider.Web.Html.Models" />

                <add namespace="DevTrends.MvcDonutCaching" />
            </namespaces>
        </pages>
    </system.web.webPages.razor>

    <appSettings>
        <add key="webpages:Enabled" value="false" />
    </appSettings>

    <system.webServer>
        <validation …
Run Code Online (Sandbox Code Playgroud)

razor asp.net-mvc-5

64
推荐指数
5
解决办法
6万
查看次数

MVC5,WebAPI2和AutoFac无法正常工作.所有Nuget包都已更新

我已经更新了我的项目中的所有nuget包,以及AutoFac MVC5集成包(删除了MVC4)并且仍然没有骰子.

重写成员时违反了继承安全规则:'Autofac.Integration.WebApi.AutofacWebApiDependencyResolver.BeginScope()'.覆盖方法的安全性可访问性必须与被覆盖的方法的安全性可访问性相匹配.

autofac asp.net-web-api asp.net-mvc-5

62
推荐指数
1
解决办法
2万
查看次数

'router-outlet'不是一个已知的元素

我有一个带角度前端的mvc 5项目.我想按照本教程https://angular.io/guide/router中的说明添加路由.所以在我的_Layout.cshtml中我添加了一个

<base href="/">
Run Code Online (Sandbox Code Playgroud)

并在我的app.module中创建了我的路由.但是当我运行这个时,我收到以下错误:

Error: Template parse errors:
    'router-outlet' is not a known element:
    1. If 'router-outlet' is an Angular component, then verify that it is part       of this module.
    2. If 'router-outlet' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA'   to the '@NgModule.schemas' of this component to suppress this message. ("
    <a routerLink="/dashboard">dashboard</a>
    </nav>
    [ERROR ->]<router-outlet></router-outlet>
     "): ng:///AppModule/AppComponent.html@5:0
Run Code Online (Sandbox Code Playgroud)

在我的app.component中

<router-outlet></router-outlet>
Run Code Online (Sandbox Code Playgroud)

给出一个错误,告诉我Visual Studio无法解析标签'router-outlet'.有任何建议我如何解决这个错误?我错过了参考或导入或只是忽略了什么?

下面是我的package.json,app.component和app.module

的package.json

{
  "version": "1.0.0",
  "name": "app",
  "private": true,
  "scripts": {},
  "dependencies": {
    "@angular/common": "^4.2.2", …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc-5 angular2-routing angular

61
推荐指数
13
解决办法
11万
查看次数