小编Dan*_*Dan的帖子

ClaimsPrincipal的作用是什么,为什么它有多个身份?

我试图基于应用程序(依赖方)的声明来理解.NET背后的安全模型.

我知道有两大类:

  • ClaimsPrincipal - 正在运行的进程的安全上下文
  • IdentityPrincipal - 存储有关用户的信息 - 身份验证状态和声明

ClaimsPrincipal只包含一组身份和指向当前使用的身份,但据我所知,主体通常永远不会包含多于1个身份,即使它会 - 但用户从未登录过2个或更多身份.

对我来说,ClaimsPrincipal,除了使用它来获得当前的身份,原谅我的无知,它是无用的.

除了我所陈述的内容之外我还缺少什么,让我们说一下与ClaimsPrincipal类相关的向后兼容性?

.net c# authentication claims-based-identity wif

24
推荐指数
3
解决办法
8851
查看次数

如何在T4模板中提供连接字符串?

我编写了一个T4模板,我在其中实例化一个EF上下文来读取一些数据.问题是上下文无法从Web.config中看到连接字符串.

如何使Web.config中的连接字符串可用于模板?

更多信息:

  • 模板是从头开始编写的
  • EF edmx位于另一个项目中
  • 我在模板中创建的第一个查询告诉我,它无法在模板所在的项目中找到所需的连接字符串

试过下面的一些解决方案(谢谢),但我明白了:

Error 2 Compiling transformation: 'Microsoft.VisualStudio.TextTemplating12165CB53B43A726CBA54A29800255D257AAFD4D5F0DACE4DFE5872F2DEC7739EDF358F49C0444A912B851939903A79BC6180FCEB3FD0D1BF8C0093741DDDACA.GeneratedTextTransformation' does not contain a definition for 'Host' and no extension method 'Host' accepting a first argument of type 'Microsoft.VisualStudio.TextTemplating12165CB53B43A726CBA54A29800255D257AAFD4D5F0DACE4DFE5872F2DEC7739EDF358F49C0444A912B851939903A79BC6180FCEB3FD0D1BF8C0093741DDDACA.GeneratedTextTransformation' could be found (are you missing a using directive or an assembly reference?)
Run Code Online (Sandbox Code Playgroud)

我声明了以下内容:

<#@ assembly name="EnvDTE" #>
<#@ import namespace="EnvDTE" #>
<#@ import namespace="Microsoft.VisualStudio.TextTemplating" #>
Run Code Online (Sandbox Code Playgroud)

如果我包含Microsoft.VisualStudio.TextTemplating的程序集,它会告诉我它已经插入.

另外,有没有办法让ConfigurationManager对DbContext可用,这样他就可以在没有我传递连接字符串的情况下阅读他想要的幕后工作?


解决了它,再次感谢:

<#@ template hostspecific="true" language="C#" debug="false" #>
<#@ assembly name="System.Core.dll" #>
<#@ assembly name="System.Configuration" #>
<#@ import namespace="Microsoft.VisualStudio.TextTemplating" #>
<#@ …
Run Code Online (Sandbox Code Playgroud)

c# t4 entity-framework

10
推荐指数
2
解决办法
6368
查看次数

如何告诉Entity Framework仅保存特定DbSet的更改?

假设我在单个DbContext中修改来自不同DbSets的实体.

在调用SaveChanges()时,如何保存Entity Framework以仅保存特定DbSet的更改?

.net c# entity-framework

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

如何在请求参数中匹配web api 2路由和正斜杠?

我正在使用Web API 2属性路由,我有一个未正确解决的请求.

[Route("~/foo/{bar?}")]
public void Get(string bar);
Run Code Online (Sandbox Code Playgroud)

我的要求是:mydomain.me/foo/abc/def

我希望收到bar作为"abc/def",但正斜线会使路线匹配.用"%2F"替换正斜杠并不能解决问题.

asp.net-web-api asp.net-web-api-routing

9
推荐指数
1
解决办法
4121
查看次数

C#Web API模型绑定提供程序应该如何工作?

我有以下内容:

  • 请求网址:'endpoint/1,2,3?q = foo'
  • 请求绑定的操作:公共对象栏([ModelBinder]列表<T> ids,[FromUri]字符串q)

我想将"1,2,3"片段映射到"ids"参数,因此我根据此链接创建了一个ModelBinderProvider ,它应该调用正确的模型绑定器.

public class MyModelBinderProvider: ModelBinderProvider
{
    public override IModelBinder GetBinder(HttpConfiguration configuration, Type modelType)
    {
        IModelBinder modelBinder = null;

        if (modelType.IsGenericType && (modelType.GetGenericTypeDefinition() == typeof(List<>)))
        {
            modelBinder = new ListModelBinder();   
        }

        return modelBinder;
    }
}
Run Code Online (Sandbox Code Playgroud)

我在Global.asax中注册了提供者,如下所示:

GlobalConfiguration.Configuration.Services.Insert(typeof(ModelBinderProvider), 0, new MyModelBinderProvider());
Run Code Online (Sandbox Code Playgroud)

原因是:我创建了这个提供程序,因为我想要,无论T是什么('1,2,3'或'一,二,三'),绑定工作.

问题是:让'说T'是'int'; 每次发送请求时,'modelType'参数总是'int'而不是我所期望的 - 'List <int>',因此请求没有得到妥善处理.

奇怪的是:做这样的事情有效,但T是专业的,因此不是我想要的:

var simpleProvider = new SimpleModelBinderProvider(typeof(List<int>), new ListModelBinder());
GlobalConfiguration.Configuration.Services.Insert(typeof(ModelBinderProvider), 0, simpleProvider);
Run Code Online (Sandbox Code Playgroud)

我看不出我做错了什么,为什么'modelType'参数不是预期值?

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

9
推荐指数
1
解决办法
1794
查看次数

为什么我收到异常"控制器上找不到公共操作方法"?

我正在使用以下文章添加到ASP.NET MVC本地化 - 使用路由来支持多文化路由.

如果查看"注册路径"部分,您将看到当前路径已更新(在"RegisterRoutes"方法中)与"{culture}"段.

区别在于我想保留当前路线并为每个带有"{culture}"段的路径添加副本,因此对于像"foo/bar"这样的路线,我会得到一个重复的"{culture}/foo/bar" ".

你可以看到我也确保新路线是第一位的.

public static void MapMvcMultiCultureAttributes(this RouteCollection routes, bool inheritedRoutes = true, string defaultCulture = "en-US", string cultureCookieName = "culture")
{
    routes.MapMvcAttributeRoutes(inheritedRoutes ? new InheritedRoutesProvider() : null);

    var multiCultureRouteHandler = new MultiCultureMvcRouteHandler(defaultCulture, cultureCookieName);

    var initialList = routes.ToList();
    routes.Clear();

    foreach (var routeBase in initialList)
    {
        var route = routeBase as Route;
        if (route != null)
        {
            if (route.Url.StartsWith("{culture}"))
            {
                continue;
            }

            var cultureUrl = "{culture}";
            if (!String.IsNullOrWhiteSpace(route.Url))
            {
                cultureUrl += "/" + route.Url; …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc routing exception

8
推荐指数
1
解决办法
728
查看次数

如何为路由属性设置 slug?

我有一个这样的动作:

[HttpGet]
[Route("~/books/{id:int:min(1)}/{slug?}")]
public ActionResult Book(int? id, string slug)
{
    if (slug == null)
    {
        slug = "awesome-book";
        return RedirectToAction("Book", new { id, slug });
    }

    etc.
}
Run Code Online (Sandbox Code Playgroud)

问题是新路由的生成方式类似于“ books/1?slug=awesome-book ”,这不是我想要的,而是“ books/1/awesome-book ”。如何正确设置滑块?

asp.net-mvc routes custom-attributes slug asp.net-mvc-5

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

替代C/C++ localtime()

我正在尝试使用以下代码获取C++中的当前本地时间:

time_t rawtime;
struct tm * timeinfo;

time (&rawtime);
timeinfo = localtime (&rawtime);
Run Code Online (Sandbox Code Playgroud)

不幸的是,当使用消息_BLOCK_TYPE_IS_VALID(pHead-> nBlockUse)调用localtime(在__getgmtimebuf - > _malloc_crt中某处)时,我得到"debug assertion failed".

我错过了什么,我需要一些编译标志(我使用vs 2012与c ++ 11)?

如果没有,我还有什么选择?


我无法发布整个代码,因此隔离更多上下文并不容易.似乎错误不是来自时间函数,而是来自逻辑的其余部分(因为它们在一个单独的项目中工作),我将尝试找到导致它的原因但仍然,我觉得错误有点模糊.

我在做什么是这样的:

#include <iostream>
#include <chrono>
#include <ctime>
#include <string>
#include <thread>

class A
{
public:
    void time()
    {   
        //time_t rawtime;
        //struct tm * timeinfo;

        //time (&rawtime);
        //timeinfo = localtime (&rawtime);

        time_t now = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
        std::cout << std::ctime(&now);
    }
};

class B
{
public:
    void run(A *a)
    {       
        this->a = a;

        this->t = new …
Run Code Online (Sandbox Code Playgroud)

c++ windows visual-studio c++11

0
推荐指数
1
解决办法
2456
查看次数