关于ASP.NetMVC的AzureB2C应用程序注册是否也可以与XamarinIOS和Android应用程序一起使用的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于ASP.NETCore
关于ASP.Net MVC 的 Azure B2C 应用程序注册是否也可以与 Xamarin IOS 和 Android 应用程序一起使用的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 14. ASP.NET Core Identity 入门、ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 27. CICD Azure DevOps、ASP.NET Core 或 ASP.NET Core MVC 解决方案无法运行,IIS Express 抛出 HTTP 错误 500.30 - ASP.NET Core 应用程序无法启动、ASP.NET MVC , ASP.NET Web API 的路由系统与 ASP.NET 的路由系统是怎么衔接的?等相关知识的信息别忘了在本站进行查找喔。
本文目录一览:- ASP.Net MVC 的 Azure B2C 应用程序注册是否也可以与 Xamarin IOS 和 Android 应用程序一起使用
- ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 14. ASP.NET Core Identity 入门
- ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 27. CICD Azure DevOps
- ASP.NET Core 或 ASP.NET Core MVC 解决方案无法运行,IIS Express 抛出 HTTP 错误 500.30 - ASP.NET Core 应用程序无法启动
- ASP.NET MVC , ASP.NET Web API 的路由系统与 ASP.NET 的路由系统是怎么衔接的?
ASP.Net MVC 的 Azure B2C 应用程序注册是否也可以与 Xamarin IOS 和 Android 应用程序一起使用
如何解决ASP.Net MVC 的 Azure B2C 应用程序注册是否也可以与 Xamarin IOS 和 Android 应用程序一起使用
我有一个网站,该网站目前已上线并使用 Azure B2C 来管理用户身份验证。该网站非常成功,以至于我决定使用 Xamarin 构建该网站的应用程序(IOS 和 Android)版本。
我的两个问题是:
-
我可以在 B2C 中使用我现有的应用程序注册来验证我的 MVC 和本机应用程序吗?如果是这样,这是通过 Azure B2C 中“身份验证”选项卡的“高级设置”部分下的“允许公共客户端流”单选按钮完成的吗?将其从“否”变为“是”是否会影响我的网站注册运行(因为该系统有数千名用户,我非常担心更新 B2C 设置。
-
测试 Azure B2C 更改的最佳方法是什么?有没有一种简单的方法可以创建开发环境,然后将其转换为实时版本,并使用开发环境切换实时版本?
我们将不胜感激。
J
解决方法
- 我可以使用 B2C 中现有的应用程序注册来验证我的 MVC 和本机应用程序吗?如果是这样,这是通过 高级设置下的允许公共客户端流单选按钮 Azure B2C 中的“身份验证”选项卡部分?将把这个从 No to Yes 会影响我注册网站的运行(如 该系统与数千名用户一起使用,我非常谨慎 B2C 设置的更新。
在这种情况下不建议使用相同的应用注册。
请参阅differences between public client and confidential client applications。
机密客户端应用程序可以安全地保留应用程序机密,而公共客户端则不然。如果您使用相同的应用程序注册,则在保留应用程序机密方面存在冲突。并且多个应用使用同一个应用注册会使得权限控制更加困难。
因此,在这种情况下,建议使用公共客户端/本机平台创建新的应用注册。
将允许公共客户端流从否改为是并不意味着将其更改为原生应用类型。
您可以在清单文件中设置 "allowPublicClient": true,
。
- 测试 Azure B2C 更改的最佳方法是什么?有没有一种简单的方法来创建可以翻转的开发环境, 使用开发环境切换实时版本?
创建新的应用注册不会影响您的网络应用的使用。
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 14. ASP.NET Core Identity 入门
默认的身份认证好授权系统
UserManager用来操作用户的类,
Singi用来身份认证的
添加AccountController
先声明SignInManager和UserManager这两个服务
快捷键Ctrl+.
两个都需要分别进行Ctrl+.快速的生成
创建登陆的Action Login
建立View
创建LoginViewModel
主要是用户名和密码两个字段
登陆的逻辑
注册的逻辑
退出的逻辑
创建regiser的视图页面
在_Lauout里面添加了注册和登陆的链接
点击注册发现报错了。没有注册服务
注册服务
这里按照官方文档来就可以了
这里么有ApplicationDbContext
这里修改为IdentityContext
先进行数据迁移
报错,项目里面多余一个DbContext。一个是自己的DbConext 一个是Identity的DbContext
所以需要指定具体的DbContect
注册服务的时候,指明迁移的类库名称
再次尝试成功
上面只是配置了DbConext,还需要注册IdentityUser的服务
前面多加了一个叹号
密码严格要求了
参考官方文档:把这块复制过去进行修改
判断用户登陆成功后就不再显示,注册和登陆的按钮,在View页面注册ItentityUser
运行页面并不好用,没有使用中间件
登陆成功后
授权
添加一个学生,要求只有登陆的用户才可以进去添加
授权使用Authorize这个属性,这样就只有登陆的用户才可以访问这个Create页面
这个标签可以作用于Controller也可以作用于action,这里我们先作用于Create的两个Action就可以了
Authorize属性也可以加一些参数。。。、这里展示先不加
测试页面。
需要一个LoginPartial页面,一旦没有权限就会跳转到这个页面。这里我们先不做,
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 27. CICD Azure DevOps
VSTS做持续集成
后来改名叫做Azure Deveps
https://azure.microsoft.com/zh-cn/services/devops/
这是中文的地址
创建一个项目
名称、描述、私有的项目
然后点击创建。对个人用户完全免费,个人团队不超过5个人都可以使用
相当于项目的首页
源码放在这里
复制git的地址
git init
然后把复制的两句话粘贴进去
这样源码 就上传上来了。
项目工行迁进来 看不出来啥效果。看一个已经存在的项目
找到一个文件之后,就可以看到文件的代码
修改的历史
点击历史可以对当前版本进行比较
开发管理
可以点开查看详情:
自定义查询,例如查询分配给我的工作
今天主要讲整理
可以做构建和发布
cl就是持续集成的意思
支持多种语言平台,除了.net core还支持java等
基本上都是默认的
可以输入关键字搜索模板,点击Apply
模板里面有这些步骤
有任何的代码提交到Mater后,就会开始自动构建
直接默认,然后点击Save即可
Releases
点击Add后就是这个效果
点击闪电的符号
选择订阅
然后再点击授权;
修改下本地的代码
代码提交一下 然后push
代码提交了就进行了一次build
状态变成对号了
在看Release,邮件也收到了。
点进去
点进去
看到失败了
更多的参考语雀:
https://www.yuque.com/yuejiangliu/dotnet/pu6igu
ASP.NET Core 或 ASP.NET Core MVC 解决方案无法运行,IIS Express 抛出 HTTP 错误 500.30 - ASP.NET Core 应用程序无法启动
如何解决ASP.NET Core 或 ASP.NET Core MVC 解决方案无法运行,IIS Express 抛出 HTTP 错误 500.30 - ASP.NET Core 应用程序无法启动
即使在 Visual Studio 中最简单的“Hello world”ASP.NET Core Web 应用程序上,我也遇到过此错误。 (Win 10 Pro、IIS Express、VS 2019 CE。)重现步骤:
在 Visual Studio 2019 中创建新的 ASP.NET Core 或 ASP.NET Core MVC 解决方案。选择选项以生成基本“hello world”应用程序的脚手架代码。无论您的目标是 .NET Core 2.1、.NET Core 3.1 还是 .NET 5.0,在我尝试的场景中结果都是一样的。
项目和解决方案已加载,源代码可见且看起来正确。按F5运行它。应用编译但不运行。
预期行为:“hello world”应用加载。
实际行为:在网络浏览器中显示此错误消息:
“HTTP 错误 500.30 - ASP.NET Core 应用程序无法启动”(以及一些 故障排除步骤,然后)“有关更多信息,请访问: https://go.microsoft.com/fwlink/?LinkID=2028265”。
- 继续并点击该链接,然后使用这些资源仔细检查您是否拥有所有需要的包并且您的 IIS 配置正确。我的机器在我的机器上看起来很好,但我仍然收到这个错误。我什至尝试重新安装 VS、托管包、IIS 等,但无济于事。
注意:此问题与“500.32 ANCM Failed To 加载 DLL”或“500.36 ANCM 进程外处理程序加载失败” 错误,但我在故障排除过程中也遇到了这些错误,所以我 在这里提及它们,以防对其他人有帮助。
另请注意:您不一定有损坏的 ASP.NET Core 模块为 this documentation 会让您相信。
- 检查事件日志,您会发现其中存在一些错误,但在这种情况下,这些错误对诊断问题没有特别帮助。就我而言,它只是说
"应用程序 ''/LM/W3SVC/2/ROOT'' 具有物理根目录 ''H:\\Repo (R;)\\sandBox\\AspNetCoreWebApp001\\AspNetCoreWebApp001''加载失败 核心资源异常消息:CLR 工作线程提前退出"
和
"应用程序已从 Program.Main 退出,退出代码 = ''-2147450743''。请检查 stderr 日志以获取更多信息。"
他们将 IIS Express AspNetCore 模块显示为源。供应商文档在这种情况下并没有太大帮助。
仔细检查以确保 IIS 配置正确,并且安装了正确的包,包括 .NET Core 托管包。如果您不这样做,或者您正在尝试不同的配置,就像我在故障排除期间一样,那么您可能会看到上面提到的 ANCM 错误。如果您遇到这些错误,这里有 two links 可以提供帮助。我阅读了这些链接并多次仔细检查了我的机器。就我而言,这一切都是正确和完整的,但我仍然有错误。
再和电脑打几下,叫它一些坏名字,第三次重新安装Visual Studio,第八次验证IIS设置,向你的朋友寻求帮助,再次检查SO和Google。简单的 hello world 应用程序仍然无法运行,同样的错误。它在另一台机器上运行,所以代码本身没有任何问题。
解决方法
这是最终在我的机器上修复它的解决方案:我将解决方案移到了不同的文件夹。 HUH???如何我问,这能不能解决这个问题。经过一番折腾,我终于找到了根本原因:路径中有一个分号。是的。就我而言,我一直将解决方案存储在名为“H:\\Repo (R;)
”的目录中。事实证明,即使 Windows 操作系统允许使用 ;
字符,.NET CLR 根本不喜欢它,也不知道如何处理它。因此它会生成无用的错误消息。
试试看。重命名“这应该可以工作”解决方案的文件夹以删除分号,关闭并重新打开 VS 中的解决方案,按 F5 并观察它运行。或者转到工作解决方案并将文件夹重命名为包含分号,然后观察它是否会破坏 CLR。
我很好奇文件夹名称中的任何其他特殊字符是否会导致问题,所以我检查了所有这些字符(在文件夹上,而不是文件名上,但我希望文件名也有类似的结果)。这是我的详尽测试:
Windows 不允许在文件夹名称中使用这些:
\\/:*?"<>|
当路径包含以下任何特殊字符时,解决方案将加载并运行:
`~-_+='',.()[]{}!@#$%&
但是,在 Windows 允许的路径中包含这些字符中的任何一个都会导致 CLR 或 Visual Studio 中的问题:
;
导致“HTTP 错误 500.30 - ASP.NET Core 应用程序无法启动”
^
VS 无法加载解决方案并显示如下错误消息:
"在命令行中指定了以下文件:<.sln> 找不到这些文件,也不会加载这些文件。” 而是加载了一个完全空的 VS 实例。
我还尝试在 VS 中在名称中包含分号的文件夹下创建一个新的“hello world”控制台应用程序,你猜怎么着?这也无法运行。虽然在这种情况下,显然 IIS 没有 HTTP 错误。相反,它说
“未能创建 CoreCLR,HRESULT:0x80070057”
并抛出进程退出代码。再一次,这是路径中有分号的结果,因为从路径中删除该分号并在 VS 中重新加载解决方案可以使其正确运行。所以分号问题似乎源于CLR,因此与IIS无关。
以下是一些有关根本原因的相关帖子,这对于在 IIS Express 上运行的 Web 应用程序并不明显:
Failed to create CoreCLR,HRESULT: 0x80070057
https://github.com/dotnet/sdk/issues/13954
因此,感谢那些对 RCA 非常有帮助的帖子的作者。
有人会认为操作系统允许的特殊字符也可以用于 Visual Studio 代码的路径中。那好吧。吸取的教训。
ASP.NET MVC , ASP.NET Web API 的路由系统与 ASP.NET 的路由系统是怎么衔接的?
ASP.NET MVC 的路由实际上是建立在 ASP.NET 的路由系统之上的.

RouteTable 是一个全局路由表, 它的 Routes 静态属性是一个 RouteCollection 类型的实例,而 RouteCollection 是一个继承自 Collection<RouteBase> 的子类, RouteBase 是 ASP.NET 路由系统定义的基类
.
RouteBase 有一个唯一的实现类:
当我们通过如下方法注册一个路由时:
实际是向全局路由表中添加了一个 Route 类型的实例,部分源码如下:
public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults, object constraints, string[] namespaces)
{
......
Route route = new Route(url, (IRouteHandler) new MvcRouteHandler())
{
......
};
......
routes.Add(name, (RouteBase) route);
return route; }
从源码中我们可以看到,添加 Route 对象的时候,直接传入了一个 MvcRouteHandler 类型的实例.
我们知道, ASP.NET 的路由系统对路由的解析是通过一个注册的 HttpModule 对象实现对请求的拦截,然后为当前 Http 上下文动态映射一个 HttpHandler 对象, 而这个 HttpHandler 对象会接管对当前请求的处理并最终对请求予以响应.
这个注册的 HttpModule 对象的类型叫做 UrlRoutingModule .
我们可以在ASP.NET 的全局系统配置文件中找到它:
<httpModules>
......
<add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule"/>
......
</httpModules>
该类型在 PostResolveRequestCache 事件实现对请求的拦截:

在拦截时,它做了这么几件事(部分源码省略):
public virtual void PostResolveRequestCache(HttpContextBase context)
{
RouteData routeData = this.RouteCollection.GetRouteData(context);
IRouteHandler routeHandler = routeData.RouteHandler; IHttpHandler httpHandler = routeHandler.GetHttpHandler(requestContext); context.RemapHandler(httpHandler); }
1.遍历所有注册的路由,也就是所有添加到全局路由表中的 Route 类型的实例,通过调用它们的 GetRouteData 方法,拿到第一个匹配的 RouteData (路由数据);
2.拿到路由数据中的 RouteHandler 对象, 其实就是 MvcRouteHandler 类型的实例;
3.调用 MvcRouteHandler 的 GetHttpHandler 方法,拿到 HttpHandler.
MvcRouteHandler 的 GetHttpHandler 方法源码如下:
protected virtual IHttpHandler GetHttpHandler(RequestContext requestContext)
{
requestContext.HttpContext.SetSessionStateBehavior(this.GetSessionStateBehavior(requestContext));
return (IHttpHandler) new MvcHandler(requestContext);
}
可以看到,直接 new 了一个 MvcHandler 类型的实例,
最终,请求转交给这个 MvcHandler 类型的实例处理.
ASP.NET Web API 是怎么与 ASP.NET 路由系统接轨的呢?
我们知道, ASP.NET 的路由系统对路由的解析是通过一个注册的 HttpModule 对象实现对请求的拦截,然后为当前 Http 上下文动态映射一个 HttpHandler 对象, 而这个 HttpHandler 对象会接管对当前请求的处理并最终对请求予以响应.
这一条不仅对 MVC 适用, 对 Web API 同样适用,因为他俩都是借助于 ASP.NET 的路由系统.
区别在于 HttpHandler 的类型不一样而已.
ASP.NET Web API 注册路由的代码通常是这样的:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new
{
id = RouteParameter.Optional } );
config.Routes 是一个 HttpRouteCollection 类型的实例,并且是只读的.
只读的,就意味着只能在该实例所属的类的构造函数中初始化.
我们知道,这个 config 是 HttpConfiguration 类型,它在 GlobalConfiguration 类中初始化.
在它的初始化代码中,我们可以看到:
private static Lazy<HttpConfiguration> CreateConfiguration()
{
return new Lazy<HttpConfiguration>(() =>
{
HttpConfiguration config = new HttpConfiguration(new HostedHttpRouteCollection(RouteTable.Routes));
......return config;
});
}
HttpConfiguration 实际是对 HostedHttpRouteCollection 的封装,而后者是对 RouteTable.Route 的封装. 即 ASP.NET 全局路由表的封装.
所以说, HttpConfiguration 类型封装了 ASP.NET 的全局路由表. 它的 Routes 属性的实际类型是 HostedHttpRouteCollection
我们再回头看 config.Routes.MapHttpRoute 方法 , 也就是 HostedHttpRouteCollection 类型的 MapHttpRoute 方法:
public static IHttpRoute MapHttpRoute(this HttpRouteCollection routes, string name, string routeTemplate, object defaults, object constraints, HttpMessageHandler handler)
{
......
IHttpRoute route = routes.CreateRoute(routeTemplate, defaultsDictionary, constraintsDictionary, dataTokens: null, handler: handler);
routes.Add(name, route);
return route;
}
很简单,创建了一个路由,然后添加它.
我们继续查看 HostedHttpRouteCollection 类型的 CreateRoute 方法:
public override IHttpRoute CreateRoute(string uriTemplate, IDictionary<string, object> defaults, IDictionary<string, object> constraints, IDictionary<string, object> dataTokens, HttpMessageHandler handler)
{
......
return (IHttpRoute) new HostedHttpRoute(uriTemplate, defaults, constraints, dataTokens, handler);
}
返回了一个 HostedHttpRoute 类型的实例.
我们可以把这个方法 和 上面 MVC 的 MapRoute 方法做比较:
MVC:
public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults, object constraints, string[] namespaces)
{
......
Route route = new Route(url, (IRouteHandler) new MvcRouteHandler())
{
......
};
......
routes.Add(name, (RouteBase) route);
return route;
}
是不是非常像!不同的只是 MVC new 的路由对象是 Route 类型,而 Web API new 的路由对象是 HostedHttpRoute 类型.
讲到这里,其实 ASP.NET Web API 的路由系统还没有和 ASP.NET 的路由系统衔接起来,它们二者的关系仅仅体现在下面这句话:
HttpConfiguration 实际是对 HostedHttpRouteCollection 的封装,而后者是对 RouteTable.Route 的封装. 即 ASP.NET 全局路由表的封装.
但是,当 HostedHttpRoute 创建后,调用 HostedHttpRouteCollection 的 Add 方法添加时,衔接就真正开始了:
public override void Add(string name, IHttpRoute route)
{
_routeCollection.Add(name, route.ToRoute());
}
_routeCollection 是 RouteCollection 类型,没看错,就是 ASP.NET 路由系统的 RouteCollection .
所以,这句代码实际是向 ASP.NET 路由系统的路由集合中添加路由,目的就是为了让 UrlRoutingModule 能够拦截到匹配了 Web API 注册的路由的请求.
但是,问题来了,从上面 MVC 的讲解中我们知道, ASP.NET 路由系统的 RouteCollection 是一个继承自 Collection<RouteBase> 的子类, RouteBase 是 ASP.NET 路由的基类,
而 HostedHttpRoute 是实现了 IHttpRoute 接口的实例,
IHttpRoute 和 RouteBase 风马牛不相接啊!
所以,添加时,Web API 通过 HostedHttpRoute 的 ToRoute 方法,将自己转成了 RouteBase 类型!!
这个转化非常简单:
public static Route ToRoute(this IHttpRoute httpRoute)
{
......
HostedHttpRoute hostedHttpRoute = httpRoute as HostedHttpRoute;
if (hostedHttpRoute != null)
{
return hostedHttpRoute.OriginalRoute; }
...... }
问题又来了, HostedHttpRoute 类型的 OriginalRoute 是个什么鬼?当然,肯定是个 Route 类型,也就是说,它是一个 ASP.NET 路由系统定义的 Route 类型.那它是怎么来的呢?
我们知道,在 Web API 注册路由时, MapHttpRoute 内部创建了一个 HostedHttpRoute 类型的实例,并且是直接 new 的.
那么我们去看看 HostedHttpRoute 的构造函数:
public HostedHttpRoute(string uriTemplate, IDictionary<string, object> defaults, IDictionary<string, object> constraints, IDictionary<string, object> dataTokens, HttpMessageHandler handler)
{
......
OriginalRoute = new HttpWebRoute(uriTemplate, routeDefaults, routeConstraints, routeDataTokens, HttpControllerRouteHandler.Instance, this);
......
}
OriginalRoute 原来是一个 HttpWebRoute 类型,而 HttpWebRoute 则是 ASP.NET 路由系统定义的 Route 类型的子类.
并且,创建 HttpWebRoute 类型的实例时,传入了一个 ASP.NET 路由系统定义的 IRouteHandler 类型的实例 : HttpControllerRouteHandler.Instance
而 HttpControllerRouteHandler 的 GetHttpHandler 方法如下:
/// <summary>
/// Provides the object that processes the request.
/// </summary>
/// <param name="requestContext">An object that encapsulates information about the request.</param>
/// <returns>
/// An object that processes the request.
/// </returns>
protected virtual IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return new HttpControllerHandler(requestContext.RouteData);
}
返回了一个 HttpControllerHandler 类型的实例.
HttpControllerHandler 类型的XML注释则非常清晰的解释了它的作用:
/// 用于将 ASP.NET 请求传递给管道并写回结果。</summary>
这里说的管道,自然就是 Web API 的消息处理管道了.
总结:
ASP.NET MVC 和 ASP.NET Web API 都是通过 UrlRoutingModule ,在 PostResolveRequestCache 事件实现对请求的拦截.
拦截后,通过对HTTP上下文,路由等一系列处理后,
MVC 创建了 MvcHandler 进行具体的请求处理及响应;
Web API 创建了 HttpControllerHandler 进行具体的请求处理及响应.
原文出处:https://www.cnblogs.com/refuge/p/10505565.html
关于ASP.Net MVC 的 Azure B2C 应用程序注册是否也可以与 Xamarin IOS 和 Android 应用程序一起使用的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 14. ASP.NET Core Identity 入门、ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 27. CICD Azure DevOps、ASP.NET Core 或 ASP.NET Core MVC 解决方案无法运行,IIS Express 抛出 HTTP 错误 500.30 - ASP.NET Core 应用程序无法启动、ASP.NET MVC , ASP.NET Web API 的路由系统与 ASP.NET 的路由系统是怎么衔接的?等相关内容,可以在本站寻找。
本文标签: