小编Ily*_*dik的帖子

请求匹配多个操作,导致ASP.NET 5/MVC 6中具有不同参数的操作不明确

我的项目中有一条简单的路线:

routes.MapRoute(
      name: "api",
      template: "api/{controller}/{action}");
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我有两个动作:

    [HttpGet]
    public string Get(string value)
    {
        return value;
    }

    [HttpGet]
    public string Get(int id)
    {
        return id.ToString();
    }
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试做一个像api/controller/get?id=1它不起作用的URL ,因为框架无法区分两个动作.据我所知,它在普通的web api中运行得非常好,因为很明显这个url只根据它的参数匹配其中一个动作.我做错了什么或新的MVC6不支持?

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

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

如何仅为ASP.NET 5中的受保护操作添加令牌验证(ASP.NET Core)

我在我的应用程序中添加了一个JWT中间件:

app.UseJwtBearerAuthentication(options => { options.AutomaticAuthenticate = true;} )
Run Code Online (Sandbox Code Playgroud)

现在,如果我的令牌未验证(例如已过期),我仍然会收到生命周期验证未通过的错误.有没有办法让中间件仅为受保护资源验证令牌?如果没有,那么我应该如何以及在哪里调用自己的中间件(将令牌读入HttpContext.User)?

PS这是我添加保护的方式:

services.AddMvc(config =>
{
    var policy = new AuthorizationPolicyBuilder()
                     .RequireAuthenticatedUser()
                     .Build();

    config.Filters.Add(new AuthorizeFilter(policy));
});
Run Code Online (Sandbox Code Playgroud)

这就是我允许公共访问的方式:

[HttpGet]
[AllowAnonymous]
public string Get(int id)
{
}
Run Code Online (Sandbox Code Playgroud)

澄清:如果没有令牌,这将有效,但如果令牌无效(例如已过期),即使公共资源将无法访问,也会抛出500(由于某些内部错误导致401应该真的存在).

authentication oauth jwt openid-connect asp.net-core

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

Chrome支持Brotli吗?(Accept-Encoding不包含br)

Can I use 页面说Chrome已经支持brotli一段时间了.我认为Accept-Encoding字符串将是这样的:

Accept-Encoding:gzip, deflate, sdch, br
Run Code Online (Sandbox Code Playgroud)

但是我检查了对StackOverflow的请求,例如它不包含brotli:

Accept-Encoding:gzip, deflate, sdch
Run Code Online (Sandbox Code Playgroud)

我想大多数网络服务器都不会真正归还你,brotli如果它不在Accept-Encoding,所以它只是看起来部分支持.

它会在以后添加还是有一些我不知道的技巧?

google-chrome http-accept-encoding brotli

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

转到.jsx的定义不起作用

我在Visual Studio Code中使用es6语法,当我导入普通文件时,我可以单击F12(转到定义),它工作得很好。问题在于组件(从.jsx文件导入)根本不起作用(单击时什么也没有发生go to definition)。有谁知道如何解决?

PS我jsconfig.json喜欢这样,以便对普通.js文件进行正确的定义:

{
    "compilerOptions": {
        "target": "ES6"
    },
    "exclude": [
        "node_modules"
    ]
}
Run Code Online (Sandbox Code Playgroud)

reactjs react-jsx visual-studio-code

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

如何在XmlHttpRequest错误事件中获取错误信息

我有这样的简单代码:

const request = new XMLHttpRequest();
request.addEventListener('error', logError);
request.open('GET', 'www.someapi.com');
request.withCredentials = true;
request.send();
Run Code Online (Sandbox Code Playgroud)

日志记录是这样的:

const logError = (error) => {
  console.log(`Error\nEvent:\n${JSON.stringify(error, null, 4)}`);
  // Code to log to server
};
Run Code Online (Sandbox Code Playgroud)

现在发生的事情是我收到错误的日志消息,但那里没有任何有意义的东西,只是"isTrusted": true. 我想获得更多关于发生了什么以及为什么会出现此错误的信息。例如,在控制台中,当我摆弄连接断开时,我会看到类似的内容:

net::ERR_CONNECTION_RESET

但是当涉及到 javascript 事件时,实际上没有任何有意义的信息来弄清楚发生了什么。例如,我已经读到 CORS 可能会导致这里出现这种情况,但是如果没有任何消息,很难弄清楚发生了什么。

javascript xmlhttprequest dom-events

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

如何在用户注册期间生成OWIN承载令牌

我已经使用OWIN和bearer token实现了身份验证,当用户尝试登录时,它可以正常工作.所以我转到特殊的\ Token url并提供用户名/密码并获得此令牌作为响应.但我也有注册用户功能,理想情况下,我想在注册用户后立即获得此令牌.我可以在Web服务器内部进行\ Token,或者在客户端注册后执行\ Token,但我希望有一个解决方案,我可以做类似的事情

public Token RegisterUser(RegisterUserRequest request)
{
    // Registration here
    return OAuthProvider.GenerateToken(username, password)
}
Run Code Online (Sandbox Code Playgroud)

有可能做那样的事吗?

.net c# asp.net-mvc owin bearer-token

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

如何在Angular2/Typescript中调试Observable值?

我已经按照角度2的教程进行操作,并且具有搜索功能,可以异步呈现英雄列表.

<div *ngFor="let hero of heroes | async">
    {{hero.name}}
</div>
Run Code Online (Sandbox Code Playgroud)

在组件中我有可观察的英雄:

heroes: Observable<Hero[]>;
Run Code Online (Sandbox Code Playgroud)

现在我已经在我的应用程序中实现了类似的功能,我没有看到任何内容,我也没有看到任何错误.我在Chrome中打开调试器并尝试检查英雄的值,但它当然只是一些Observable包装器.

有没有办法在调试器中查看当前/最后或某个值,或者可能还有其他一些技术可以调试这些问题?

observable rxjs typescript rxjs5 angular

4
推荐指数
2
解决办法
9303
查看次数

选择看起来像错误/缺失功能的重载时,奇怪的C#编译器行为

我最近发现了一个有趣的C#编译器行为.想象一下这样的界面:

public interface ILogger
{
   void Info(string operation, string details = null);
   void Info(string operation, object details = null);
}
Run Code Online (Sandbox Code Playgroud)

如果我们这样做

logger.Info("Create")
Run Code Online (Sandbox Code Playgroud)

编译器会抱怨他不知道选择哪个重载(不明确的调用......).似乎合乎逻辑,但是当你尝试这样做时:

logger.Info("Create", null)
Run Code Online (Sandbox Code Playgroud)

它突然没有麻烦,搞清楚null是一个字符串.此外,似乎找到正确的重载的行为已经随着时间的推移而改变,我发现旧代码中的错误在之前工作并且停止工作,因为编译器决定使用另一个重载.

所以我真的很想知道为什么C#在第二种情况下不会像第一种情况那样产生相同的错误.这样做似乎非常符合逻辑,但它尝试将其解析为随机重载.

PS我不认为提供这种模糊的界面是好的,不建议这样做,但遗产是遗留的,必须保持:)

c# overloading compiler-errors

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

如果在迭代IEnumerable时发生异常(从控制器返回),AspNet.Core将返回200 OK且Json无效

似乎AspNet.Core开始立即发送响应,IEnumerable而无需遍历整个集合。例如:

[HttpGet("")]
public async Task<IActionResult> GetData()
{
    IEnumerable<MyData> result = await _service.GetData();
    return Ok(result.Select(_mapper.MapMyDataToMyDataWeb));
}
Run Code Online (Sandbox Code Playgroud)

现在,在映射其中一个元素的过程中发生了一个异常,因此我假设有一个500响应,但是实际上发生的是,我得到的200Json只有部分(且不正确)的Json。

我认为这Asp.Net Core是提供此行为的功能而不是错误,并且通过调用eg可以相对容易地修复ToList(),但是我想知道是否存在某种标志可以阻止这种情况的发生,因为它并不能真正使这种情况发生。例如API项目和标准JSON响应的含义。

我在文档中找不到任何描述此行为以及如何防止它的内容。

PS我已经验证了呼叫可以ToList()解决此问题,并且响应为500,带有正确的异常(带有UseDeveloperExceptionPage

c# http httpresponse .net-core asp.net-core

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

这个语法在 C# 中的名称是什么(类似多元组的赋值)?

我在 MS 文档中发现了这种语法:

public NewsStoryViewModel(DateTimeOffset published, string title, string uri) =>
        (Published, Title, Uri) = (published, title, uri);
Run Code Online (Sandbox Code Playgroud)

它在一个语句中进行多项赋值,但我不太确定它叫什么或它是如何工作的。

这是通过假装这些是元组来进行多重赋值的某种技巧还是它有自己的名字?

PS如果有人感兴趣,这里会提到

PPS 我想知道的不是 {} 的缺失,而是第 2 行的“花哨”分配而不是传统分配。

c#

4
推荐指数
2
解决办法
251
查看次数