小编Gra*_*cie的帖子

MVC 5 Owin Facebook Auth导致Null参考异常

我正在尝试在Visual Studio 2013中的新MVC 5项目中设置集成的OWIN Facebook身份验证.我已根据本教程配置了应用程序和密钥:

http://www.asp.net/mvc/tutorials/mvc-5/create-an-aspnet-mvc-5-app-with-facebook-and-google-oauth2-and-openid-sign-on

但是,我在AccountController中从此调用中抛出了NullReferenceException:

    [AllowAnonymous]
    public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
    {
        var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
Run Code Online (Sandbox Code Playgroud)

我已经检查了Fiddler的回复,并且得到了Facebook的成功回复,但仍然得到了这个错误.响应如下:

{"id":"xxx","name":"xxx","first_name":"xxx","last_name":"xxx","link":
"https:\/\/www.facebook.com\/profile.php?id=xxx","location":{"id":"xxx","name":"xxx"},
"gender":"xxx","timezone":1,"locale":"en_GB","verified":true,"updated_time":"2013-10-23T10:42:23+0000"}
Run Code Online (Sandbox Code Playgroud)

我在http和https中进行调试时得到了这个.我猜这是一个框架错误,但迄今为止通过反射器诊断出这一点.

asp.net-mvc facebook owin asp.net-mvc-5 asp.net-identity

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

映射子对象时,AutoMapper传递父引用

我正在尝试使用AutoMapper将从Web服务接收的一些DTO(数据协定)对象映射到我的业务对象中.根DTO对象包含子对象的集合.我的业务对象还有子业务对象的子集合.为了让AutoMapper工作,我必须在业务对象的collection属性中包含一个setter,否则该collection将始终为空.另外,我必须在集合类型中添加一个默认构造函数.因此,在我看来,AutoMapper正在实例化一个新的集合对象,填充它并设置为我的业务对象的集合属性.

虽然这一切都很好,但我还有一些额外的逻辑,当创建集合并使默认构造函数失败时,必须将其连接起来.从本质上讲,我正在建立父子关系,并将一些事件连接起来,以便它们从孩子到父母一起冒泡.

我想要做的是让AutoMapper简单地将子对象从DTO的集合映射到我的BO上的现有集合.换句话说,跳过创建新集合并简单地使用业务对象已有的集合.

有没有办法轻松完成这个?!?!?

UPDATE

也许更好的问题,以及对我的问题更简单的解决方案,是否可以定义AutoMapper在实例化时传递给集合的参数?我的子集合定义如下:

public class ChildCollection : Collection<ChildObjects>
{
    public ChildCollection(ParentObject parent) { Parent = parent; }
}
Run Code Online (Sandbox Code Playgroud)

如果我可以配置AutoMapper来使用这个构造函数并传入适当的对象,那将是完美的!

另一个更新

为了清楚起见,这里是问题空间中的其他类:

public class ParentObject
{
    private ChildCollection _children;

    public ChildCollection Children
    {
        get
        {
            if (_children == null) _children = new ChildCollection(this);

            return _children;
        }
    }
}

public class ParentDTO
{
    public ICollection<ChildDTO> Children { get; set; }
}

public class ChildDTO
{
    public String SomeProperty { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我这样配置AutoMapper:

Mapper.CreateMap<ParentDTO, ParentObject>();
Mapper.CreateMap<ChildDTO, ChildObject>();
Run Code Online (Sandbox Code Playgroud)

这样做,我必须在ParentObject中的Children属性和ChildCollection的默认(无参数)构造函数中添加一个setter.虽然我可以解决定义父子关系的需要,但似乎期望AutoMapper支持在创建子集合时配置映射以使用特定构造函数.像这样的东西: …

collections parent-child automapper

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