小编Ale*_*eks的帖子

将 OpenID Connect 与 .NET Core 3.0 ASP.NET Core API 服务一起使用时出错

我正在尝试在 .NET Core 3.0 ASP.NET Core API 服务中使用 Azure AD 实现 OpenID Connect。

它只是一个 API 服务,没有 UI,并且使用单独的 SPA 来访问 API 服务。

根据此处的说明,我从我的 SPA 发送登录请求,在身份验证后,该请求被重定向回/signin-oidc我的 API 上的端点。

此时,我收到一个错误:-

Error from RemoteAuthentication: "Unable to unprotect the message.State.".
Run Code Online (Sandbox Code Playgroud)

来自 SPA 的初始请求如下所示:-

tenantId = my Azure AD tenant ID
clientId = my Azure AD application ID
responseType = "id_token"
redirectUri = "http://localhost:12345/signin-oidc"
scope = "openid"
responseMode = "form_post"
state = "12345"
nonce = "67890"

https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/authorize?client_id={clientId}&response_type={responseType}&redirect_uri={redirectUri}&scope={scope}&response_mode={responseMode}&state={state}&nonce={nonce}
Run Code Online (Sandbox Code Playgroud)

我的 API 启动代码如下所示:-

services.AddAuthentication(AzureADDefaults.BearerAuthenticationScheme)
    .AddAzureAD(o …
Run Code Online (Sandbox Code Playgroud)

openid-connect asp.net-core asp.net-core-webapi

7
推荐指数
1
解决办法
2528
查看次数

MVC3 - 编译的Razor视图找不到_ViewStart

我在单独的类库中使用编译的Razor视图作为MVC3的一种插件系统.

我接着克里斯·范·德斯蒂德导向这里,只有主要偏离的部分有关添加引用,因为我装我的组装件在运行时.

因为我在运行时加载程序集,所以我没有在BoC库中使用VirtualPathProviderViewEngine,而是基于RazorViewEngine实现了我自己的ViewEngine.它的工作原理是在CreateView中重写viewPath以插入适当的命名空间,以便可以解析视图.

到目前为止一切都很好......我可以加载不同的模块,如果它们共享相同的名称,它们的控制器不会发生冲突.

我现在唯一的问题是,对于编译视图,不会调用_ViewStart._ViewStart适用于主机MVC3项目中的视图,但是对于从插件程序集加载的任何视图,它都找不到.

我有这样的路线设置: -

RouteTable.Routes.MapRoute(
    string.Format("Plugin{0}Route", pluginName),
    string.Format(@"Plugin/{0}/{{controller}}/{{action}}", pluginName),
    new { },
    new string[] { string.Format("{0}.Controllers", pluginName) });
Run Code Online (Sandbox Code Playgroud)

ViewEngine看起来像这样: -

public class PluginRazorViewEngine : RazorViewEngine
{
    public PluginRazorViewEngine() : base()
    {
        ViewLocationFormats = new[]
        {
            "~/Plugin/%1/Views/{1}/{0}.cshtml",
            "~/Plugin/%1/Views/{1}/{0}.vbhtml",
            "~/Plugin/%1/Views/Shared/{0}.cshtml",
            "~/Plugin/%1/Views/Shared/{0}.vbhtml",
            "~/Views/{1}/{0}.cshtml",
            "~/Views/{1}/{0}.vbhtml",
            "~/Views/Shared/{0}.cshtml",
            "~/Views/Shared/{0}.vbhtml"
        };
Run Code Online (Sandbox Code Playgroud)

(%1被替换为程序集的名称)

并且汇编在BoC库中注册如下: -

BoC.Web.Mvc.PrecompiledViews.ApplicationPartRegistry.Register(assembly, string.Format("/Plugin/{0}/", pluginName));
Run Code Online (Sandbox Code Playgroud)

从插件程序集加载视图时(在此示例中为"accounts"),查找并显示视图.但是它会在这些位置查找_ViewStart: -

~/plugin/accounts/views/invoice/_viewstart.cshtml
~/plugin/accounts/views/invoice/_viewstart.vbhtml
~/plugin/accounts/views/_viewstart.cshtml
~/plugin/accounts/views/_viewstart.vbhtml
~/plugin/accounts/_viewstart.cshtml
~/plugin/accounts/_viewstart.vbhtml
~/plugin/_viewstart.cshtml
~/plugin/_viewstart.vbhtml
~/_viewstart.cshtml
~/_viewstart.vbhtml
Run Code Online (Sandbox Code Playgroud)

但它没有查看文件所在的〜/ Views/Shared/_ViewStart.cshtml.

我试过改变我的ViewEngine中的所有位置格式(AreaMasterLocationFormats,AreaPartialViewLocationFormats,AreaViewLocationFormats,MasterLocationFormats,PartialViewLocationFormats和ViewLocationFormats),但它们似乎没有任何区别.

我环顾四周,似乎System.Web.WebPages.StartPage.GetStartPage负责查找并返回视图中的起始页面,但我找不到任何有关如何控制它的外观的信息.

我已经尝试将_ViewStart.cshtml移动到〜/ _ViewStart.cshtml(它看起来的地方之一)但是我马上得到: -

Unable to cast object …
Run Code Online (Sandbox Code Playgroud)

plugins razor asp.net-mvc-3

5
推荐指数
1
解决办法
2827
查看次数