小编Han*_*fer的帖子

ASP.NET MVC 5中的"通用"OpenID

我在ASP.NET MVC 5(我以前使用过DotNetOpenAuth)中使用了新的身份验证功能.

据我所知,内置的Google提供程序使用OpenID [1](并且工作正常),但我想在进行身份验证时使用自己的OpenID提供程序.

不幸的是,我无法通过ASP.NET MVC 5的开箱即用功能找到一种简单的方法来实现这一点.我查看了源代码Microsoft.Owin.Security.Google并基于此,似乎很有可能添加一个新的OpenID供应商.

是否有更简单(可能已经内置)的方式将新的OpenID提供程序添加到ASP.NET MVC 5应用程序中?或者我必须从头开始编写一个(一个新的Owin中间件)?

[1] http://www.asp.net/mvc/tutorials/mvc-5/create-an-aspnet-mvc-5-app-with-facebook-and-google-oauth2-and-openid-sign-on
[2] http://www.symbolsource.org/MyGet/Metadata/aspnetwebstacknightly/Project/Microsoft.Owin.Security.Google/2.0.1-rtw1-20924-641-dev/Release/.NETFramework,Version=v4. 5/Microsoft.Owin.Security.Google

openid asp.net-mvc-5

13
推荐指数
1
解决办法
2416
查看次数

在ASP.NET Core中限制到控制器命名空间的路由

我试图将我的ASP.NET核心路由的控制器限制到某个命名空间.

在以前版本的ASP.NET MVC中,有一个重载string[] namespaces在添加路由时提供了参数.ASP.NET MVC 6中缺少这个.所以在谷歌搜索之后,我尝试了类似的东西

app.UseMvc(routes => {
    var dataTokens = new RouteValueDictionary {
        {
            "Namespaces", new[] {"ProjectA.SomeNamespace.Controllers"}
        }
    };

    routes.MapRoute(
         name: "default",
         template: "{controller=Home}/{action=Index}/{id?}",
         defaults: null,
         constraints: null,
         dataTokens: dataTokens
    );
});
Run Code Online (Sandbox Code Playgroud)

但它似乎没有做我想要的.有没有办法将路由引擎限制到某个命名空间?

更新

我刚刚意识到它可能需要对我在每个控制器上使用属性路由这一事实做些什么?属性路由是否会影响到定义的路由app.UseMvc()

更新2

更多细节:

我有两个完全独立的Web API项目.顺便提一下,一些路线在两者中都是相同的(即~/api/ping).这些项目在Production中是独立的,一个是用户的端点,一个是管理员的端点.

我也有单元测试,使用Microsoft.AspNet.TestHost.其中一些单元测试需要这两个Web API项目的功能(即需要"管理"端点来完全为"用户"设置测试用例).但是,当我引用两个API项目时,TestHost因为相同的路由而感到困惑,并抱怨"多个匹配的路由":

Microsoft.AspNet.Diagnostics.DeveloperExceptionPageMiddleware: Error: An unhandled exception has occurred while executing the request
Microsoft.AspNet.Mvc.Infrastructure.AmbiguousActionException: Multiple actions matched. The following actions matched route data and had all constraints satisfied:
    ProjectA.SomeNamespace.Controllers.PingController.Ping
    ProjectB.SomeNamespace.Controllers.PingController.Ping
at …
Run Code Online (Sandbox Code Playgroud)

c# asp.net asp.net-core-mvc

11
推荐指数
1
解决办法
9367
查看次数

使用.NET Core调整图像大小?

是否有适用于.NET Core的图像处理(主要是调整大小和裁剪)的库?

我知道ImageResizerImageProcessor,但是 - 据我所知- 那些需要完整的.NET Framework(dnx451)并且不能与.NET Core(dnxcore50)一起使用,因此只能在Windows上运行.

.NET Core已经可以进行图像处理吗?

image-manipulation .net-core

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

LINQ to SQL:重用lambda表达式

我偶然发现了一些奇怪的LINQ to SQL行为 - 有人可以对此有所了解吗?

我想定义一个lambda表达式并在我的LINQ语句中使用它.以下代码工作正常:

[...]
Func<Table1, bool> lambda = x => x.Id > 1000;
var result = dataContext.Table1s.Where(lambda);
[...]
Run Code Online (Sandbox Code Playgroud)

但是当我尝试在关联表的语句中使用我的lambda表达式时

[...]
Func<Table1, bool> lambda = x => x.Id > 1000;
var result = dataContext.Table2s.Where(x => x.Table1s.Any(lambda));
[...]
Run Code Online (Sandbox Code Playgroud)

我得到一个例外:

Unsupported overload used for query operator 'Any'.
Run Code Online (Sandbox Code Playgroud)

但是,我没有得到:当我将lambda直接放入查询时,它工作正常:

[...]
var result = dataContext.Table2s.Where(x => x.Table1s.Any(y => y.Id > 1000));
[...]
Run Code Online (Sandbox Code Playgroud)

为什么?!

谢谢.

linq-to-sql

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

从Entity Framework 6升级到EF Core

我正在尝试将ASP.NET MVC 5应用程序移动到MVC 6(ASP.NET vNext).

我现有的应用程序使用EF 6并且首先有一些EF代码迁移.我也希望移植这些迁移,因为我希望能够继续使用已应用现有迁移的现有数据库,而不会破坏升级路径.

k ef migration add ...与"旧"EF 6迁移相比,"新"EF Core迁移()似乎具有完全不同的格式:

  • 没有更多的设计师部分类
  • 没有更多RESX文件

是否已有"官方"方式升级这些迁移?它是否受到支持?它是否会在将来得到支持?

entity-framework entity-framework-core asp.net-core

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

Twitter API和DotNetOpenAuth&HttpClient:错误"无法验证您"

我正在尝试发布Twitter状态更新,但我无法使其正常运行.

var consumer = new TwitterConsumer(); // WebConsumer implementation
var httpClient = new HttpClient(consumer.CreateAuthorizingHandler("THE_TOKEN", new HttpClientHandler()));

var content = new FormUrlEncodedContent(new Dictionary<string, string>
{
     {"status", "test"}
});

// yes, yes, ugly code, only testing here
var s = httpClient.PostAsync("https://api.twitter.com/1.1/statuses/update.json", content);
var t = s.Result;
var u = t.Content.ReadAsStringAsync().Result; // HTTP 401, response from Twitter is {"errors":[{"message":"Could not authenticate you","code":32}]}
Run Code Online (Sandbox Code Playgroud)

当然,最初我认为我的auth令牌或OAuth流程存在一些问题,但所有其他事情都运行正常:

OAuth身份验证似乎有效,因为我可以访问其他API方法https://api.twitter.com/1.1/account/settings.json.

我甚至可以在status通过URI 提交时发布状态更新,例如POST https://api.twitter.com/1.1/statuses/update.json?status=test.当我尝试将status请求放入请求主体时,我只收到错误.

根据Google的说法,很多人都有类似的问题,不幸的是,建议的解决方案(比如content仔细检查url-encoding或-Request-Header)对我来说不起作用(请求在Fiddler看起来应该如此).

c# twitter dotnetopenauth dotnet-httpclient

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

ASP.NET MVC + FluentValidation + PartialView>没有客户端验证

我使用FluentValidation来验证我的ASP.NET MVC 5.1视图模型(使用默认的不显眼的客户端验证).我通过Ninject注册/创建我的验证器(viewmodels上没有属性):

FluentValidationModelValidatorProvider.Configure(x => x.ValidatorFactory = new NinjectValidatorFactory(_kernel));
AssemblyScanner.FindValidatorsInAssembly(Assembly.GetExecutingAssembly()).ForEach(match => _kernel.Bind(match.InterfaceType).To(match.ValidatorType));
Run Code Online (Sandbox Code Playgroud)

我有一个在整个应用程序中经常使用的局部视图.此部分视图具有自己的视图模型."主"视图模型(整个视图的视图模型)只是从这个"部分"视图模型继承而来.

public class IndexViewModel : PersonalInfoViewModel { ... }
Run Code Online (Sandbox Code Playgroud)

验证器使用相同的模式:

public class IndexValidator : PersonalInfoValidator { ... }
Run Code Online (Sandbox Code Playgroud)

这工作正常,服务器端验证以及"主"视图上的客户端验证工作.但是不会触发部分视图的客户端验证(data-val-*输入字段上没有属性).

我的"主要"观点 Index.cshtml

@model IndexViewModel
@Html.TextBoxFor(x => x.SomeProperty) // client-side validation works fine

@Html.Partial("PersonalInfo") // client-side validation in the partial view does not work (see below)
Run Code Online (Sandbox Code Playgroud)

我的部分观点PersonalInfo.cshtml:

@model PersonalInfoViewModel
@Html.TextBoxFor(x => x.FirstName) // client-side validation does not work
Run Code Online (Sandbox Code Playgroud)

我注意到当我将局部视图的模型更改为"main"viewmodel时它可以工作:

@model IndexViewModel
@Html.TextBoxFor(x => x.FirstName) // client-side …
Run Code Online (Sandbox Code Playgroud)

validation asp.net-mvc fluentvalidation asp.net-mvc-5

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

SyndicationFeed:内容为CDATA?

我正在使用.NET的SyndicationFeed来创建RSS和ATOM提要.不幸的是,我需要在描述元素(SyndicationItem的Content属性)中使用HTML内容,格式化程序会自动对HTML进行编码,但我宁愿将整个描述元素包装在CDATA中,而不对HTML进行编码.

我的(简单)代码:

var feed = new SyndicationFeed("Title", "Description", 
               new Uri("http://someuri.com"));
var items = new List<SyndicationItem>();

var item = new SyndicationItem("Item Title", (string)null, 
               new Uri("http://someitemuri.com"));

item.Content = SyndicationContent.CreateHtmlContent("<b>Item Content</b>");

items.Add(item);
feed.Items = items;
Run Code Online (Sandbox Code Playgroud)

有人知道如何使用SyndicationFeed做到这一点吗?我的最后一招是"手动"为feed创建XML,但我宁愿使用内置的SyndicationFeed.

asp.net rss syndication-feed syndication-item

4
推荐指数
1
解决办法
5543
查看次数

ASP.NET MVC:如何"理解"遗留URL但不写入它们?

请原谅令人困惑的标题;)

我们已经构建了一个ASP.NET MVC应用程序来替换我们的"旧"ASP.NET webforms怪物.我们仍然希望支持那里使用的一些旧URL,因为它们仍然可以在某个地方的电子邮件等中浮动.

例如:我们的旧系统使用了URL~/Password.aspx,新MVC系统中的URL是〜/ Home/Password.

为了支持这些旧URL,我们只是将它们添加到路由表中,例如

    routes.MapRoute(
        "Password",
        "Password.aspx",
        new {
            controller = "Home",
            action = "Password",
            id = ""
        }
    );
Run Code Online (Sandbox Code Playgroud)

这很好用,但每当我们在代码中使用Url.Action("密码","主页")时,它会生成旧的URL("〜/ Password.aspx"而不是"〜/ Home/Password").由于我们想要慢慢淘汰旧的URL,如果MVC路由仍然"理解"旧URL但只使用/写入新URL,那将是很好的.

有没有办法实现这个目标?

asp.net-mvc asp.net-mvc-routing

3
推荐指数
1
解决办法
202
查看次数

ASP.NET Core:从 jQuery POST 复杂类型始终会导致“null”模型

我正在尝试从 jQuery 发布到我的 ASP.NET Core (RC1) API。当我通过 HttpClient POST 时它工作正常,所以我认为这只是我错过的一件愚蠢的事情。

我可以在普通默认 ASP.NET 5 项目和此代码上重现我的问题。

服务器

namespace WebApplication1.Controllers
{
    [Route("api/[controller]")]
    public class ValuesController : Controller
    {
        [HttpPost]
        public IActionResult Post([FromBody]Model input)
        {
            // input is always null

            return Json(input.Value);
        }


        public class Model
        {
            public string Value { get; set; }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

客户

$.ajax({
    url: "http://localhost:5000/api/values",
    method: "POST",
    contentType: "application/json",
    dataType: "json",
    data: JSON.stringify({
        Value: "some_value"
    })
}).done(function(data) {
    console.log("Done.", data);                         
});  
Run Code Online (Sandbox Code Playgroud)

我尝试删除[FromBody],它返回一个模型,但属性从未填充。我还针对 SO 上的类似问题尝试了许多解决方案和变通方法,但我认为它们不适用于 .NET Core …

asp.net-core

3
推荐指数
1
解决办法
2565
查看次数