小编Gim*_*mly的帖子

使用Asp.net核心创建另一个Web api的代理

我正在开发一个ASP.Net Core Web应用程序,我需要为另一个(外部)Web服务创建一种"身份验证代理".

我的身份验证代理的意思是我将通过我的Web应用程序的特定路径接收请求,并且必须检查这些请求的标头以获取我之前发布的身份验证令牌,然后将所有请求重定向到相同的请求字符串/内容到我的应用程序将通过HTTP Basic身份验证进行身份验证的外部Web API.

这是伪代码的整个过程

  • 客户端通过对我之前发送给他的唯一URL进行POST来请求令牌
  • 我的应用程序向他发送了一个唯一的令牌以响应此POST
  • 客户端向我的应用程序的特定URL发出GET请求,/extapi并在HTTP标头中添加auth-token
  • 我的应用程序获取请求,检查auth-token是否存在且有效
  • 我的应用程序对外部Web API执行相同的请求,并使用BASIC身份验证对请求进行身份验证
  • 我的应用程序从请求中接收结果并将其发送回客户端

这就是我现在所拥有的.它似乎工作正常,但我想知道它是否真的应该这样做,或者是否有更优雅或更好的解决方案?从长远来看,该解决方案是否会为扩展应用程序带来问题?

[HttpGet]
public async Task GetStatement()
{
    //TODO check for token presence and reject if issue

    var queryString = Request.QueryString;
    var response = await _httpClient.GetAsync(queryString.Value);
    var content = await response.Content.ReadAsStringAsync();

    Response.StatusCode = (int)response.StatusCode;
    Response.ContentType = response.Content.Headers.ContentType.ToString();
    Response.ContentLength = response.Content.Headers.ContentLength;

    await Response.WriteAsync(content);
}

[HttpPost]
public async Task PostStatement()
{
    using (var streamContent = new StreamContent(Request.Body))
    {
        //TODO check for token presence and reject if issue …
Run Code Online (Sandbox Code Playgroud)

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

35
推荐指数
7
解决办法
4万
查看次数

如何从业务/模型类发送进度更新?

假设我们有一个具有分层架构的应用程序.在视图中我们使用MVC或MVVM.该模型被视为域,它具有很好的业务逻辑部分.

现在让我们假设我们在模型中有一个需要一些时间的方法.例如,必须对对象的每个项目进行复杂的计算或处理.

在UI中,我们希望显示进度条和显示当前计算步骤的文本(例如,包含所有过程历史记录的列表框).

你会怎么做?如何从模型中发送进程进度信息以及如何连接Controller或ViewModel以便更新进度?

architecture model-view-controller mvvm

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

在 Azure AD B2C 中定义特定于应用程序的用户角色

我想向使用 Azure AD B2C 以 Asp.Net Core 编写的 Web API 添加授权。我已经有了身份验证部分,现在我想在我的应用程序中添加“角色”,比如“管理员”,并且可能在未来添加更具体的角色。

我已经看到 Azure AD 添加“应用程序角色”的示例,但找不到任何适用于 AD B2C 的内容。Azure 门户中似乎没有任何内容,文档中也没有任何内容。

是否可以将自定义应用程序角色添加到 Azure AD B2C?

azure azure-ad-b2c

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

使用Reactive Extensions轮询Web服务并绑定最后的x个结果

我正在尝试将Reactive Extensions(Rx)用于一个看似合适的任务,以特定间隔轮询Web服务并显示其最后的x结果.

我有一个Web服务,它向我发送我想要监视的工具的状态.我想以特定的速率轮询此工具,并在列表中显示已轮询的最后20个状态.

所以我的列表就像是服务结果的"移动窗口".

我正在使用Caliburn.Micro开发一个WPF应用程序,但我不认为这是非常相关的.

我到目前为止得到的是以下内容(只是我快速入侵的示例应用程序,我不打算在真实应用程序中的ShellViewModel中执行此操作):

public class ShellViewModel : Caliburn.Micro.PropertyChangedBase, IShell
{
    private ObservableCollection<string> times;
    private string currentTime;

    public ShellViewModel()
    {
        times = new ObservableCollection<string>();

        Observable
            .Interval(TimeSpan.FromSeconds(1))
            .SelectMany(x => this.GetCurrentDate().ToObservable())
            .ObserveOnDispatcher()
            .Subscribe(x =>
            {
                this.CurrentTime = x;
                this.times.Add(x);
            });
    }

    public IEnumerable<string> Times
    {
        get
        {
            return this.times;
        }
    }

    public string CurrentTime
    {
        get
        {
            return this.currentTime;
        }
        set
        {
            this.currentTime = value;
            this.NotifyOfPropertyChange(() => this.CurrentTime);
        }
    }

    private async Task<string> GetCurrentDate()
    {
        var client = new RestClient("http://www.timeapi.org"); …
Run Code Online (Sandbox Code Playgroud)

c# system.reactive

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

登录从Angular应用程序和msal.js重定向Azure AD B2C的用户

我正在尝试使用Angular 4应用程序正确地使用Azure AD B2C进行隐式身份验证.我正在使用msal.js尝试让它工作.我已经检查了非常有限的官方示例代码,但它没有实际用途,因为它使用弹出窗口登录,我想进行重定向.

我现在拥有的是我在我的应用程序中注入的以下身份验证服务,该服务应该负责所有身份验证.

import { Injectable } from '@angular/core';
import * as Msal from 'msal';

@Injectable()
export class AuthenticationService {

    private tenantConfig = {
        tenant: "example.onmicrosoft.com",
        clientID: 'redacted (guid of the client),
        signUpSignInPolicy: "b2c_1_signup",
        b2cScopes: ["https://example.onmicrosoft.com/demo/read", "openid"]
    }

    private authority = "https://login.microsoftonline.com/tfp/" + this.tenantConfig.tenant + "/" + this.tenantConfig.signUpSignInPolicy;

    private clientApplication: Msal.UserAgentApplication;

    constructor() {
        this.clientApplication = new Msal.UserAgentApplication(this.tenantConfig.clientID, this.authority, this.authCallback);
    }

    public login(): void {
        this.clientApplication.loginRedirect(this.tenantConfig.b2cScopes);
    }

    public logout(): void {
        this.clientApplication.logout();
    }

    public isOnline(): boolean { …
Run Code Online (Sandbox Code Playgroud)

typescript azure-ad-b2c azure-ad-msal angular

6
推荐指数
1
解决办法
2511
查看次数

Word宏,存储当前选择(VBA)

我有一个Word文档,其中包含大约4000个表单字段,我必须将其导出到数据库.问题是4000个字段中没有一个在"书签"字段中有信息,因此我无法获得存储在其中的信息.

我正在尝试创建一个宏来帮助编写书签(FormField.Name)的过程,但无法设法做到正确.问题是我想要更改用户选择中包含的FormFields的名称,并且只更改它们.我设法找到了这个解决方案:

Sub Macro2()
    Dim myFile As String
    Dim fnum As Integer
    Dim sFileText As String
    Dim currentField As FormField

    myFile = "c:\testMacro.txt"
    fnum = FreeFile()
    Open myFile For Input As fnum

    For Each currentField In Selection.FormFields
        Input #fnum, sFileText

        With currentField
            .StatusText = sFileText
            .OwnStatus = True
        End With

        currentField.Select
        Application.WordBasic.FormFieldOptions Name:=sFileText
    Next currentField
End Sub
Run Code Online (Sandbox Code Playgroud)

但它不起作用,因为在For Each循环中更改了Selection对象,之后它只包含选择的第一个FormField.

所以这是我的问题,有没有办法保存当前选择并在更改后加载它.

我试过了 :

Dim mySelection as Selection
Set mySelection = Selection
Run Code Online (Sandbox Code Playgroud)

但是如果我改变了Selection,变量mySelection也会改变(这很正常......)而且我没有找到任何克隆对象的方法.

有人知道如何做到这一点?

谢谢

vba ms-word word-vba

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

外部化 WinForms 应用程序的翻译?

我正在开发一个将部署在许多不同国家的应用程序,这当然意味着不同的语言。

问题是我自己不会翻译它,其他开发人员也不会翻译它。其中一位用户将对其进行翻译,但他将无法访问 Visual Studio。

问题是,如何做到这一点?是否有工具可用于编辑 resx 文件并在应用程序上下文中查看文本?此外,是否可以将翻译文件添加到已编译的应用程序中?

.net c# globalization translation winforms

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

REST资源根据状态返回不同的对象

我正在尝试定义REST API,但我遇到了一个问题.我有一个API用户可以执行的操作是相同的,但可以通过两种不同的方式完成.

例如,假设我的用户使用我的API来改变灯光的强度.我会有一个类似的URL

API /光/强度

用户必须更改强度的一个选项是设置为最大亮度的%,另一个选项是将强度设置为精确值,以流明(有一个检测器)并且他可以传递"精度"可以是低,中,高(它会改变达到正确强度所需的时间).

我希望用户能够获得当前的强度,这意味着他在哪种模式下,取决于模式,%或流明的值和精度.

这是我丢失的地方,我的GET将返回一个JSON对象,例如,发送类似的东西是否可以

{
   "Mode" = "Percent",
   "Percent" = 50.5
}
Run Code Online (Sandbox Code Playgroud)

当我处于"百分比"模式时

{
   "Mode" = "Exact",
   "Lumens" = 200,
   "Precision" = "High"
}
Run Code Online (Sandbox Code Playgroud)

当我处于"流明"模式时?

如果这似乎没问题,我怎么告诉用户他应该解析哪种类型的"对象"?

让用户发送更改的最佳方法是什么?我在考虑有两个URL,每个模式一个,如PUT/api/light/intensity/exact和PUT/api/light/intensity/percent

两者都在等待类似于上面的JSON对象,没有Mode.

rest json

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

ReSharper 和 Caliburn.Micro 的约定

有谁知道 ReSharper 9 的插件可以让 ReSharper“理解”Caliburn.Micro 的约定?

例如,ReSharper 抱怨在 ViewModel 中未使用属性或方法,因为它已使用Name=约定自动绑定。按钮和动作也是如此。

我可以d:DataContext="{d:DesignInstance MyViewModel}在 Window/UserControl 上设置 ,但这也意味着明确地重写所有绑定,这很烦人并删除了 Caliburn 的一个不错的功能。

wpf resharper caliburn.micro

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

如何使用 json.net 在生成的 json 中“内联”一个属性

我在我的一个类中有一个属性,我试图用 json.net 序列化它,我想“内联”它,这意味着,我不想将该属性嵌套到具有属性名称的元素中,但它的内容直接在其父级中。

这是一个例子,假设我有以下类结构:

public interface ISteeringWheelIdentifier {}

public interface ISteeringWheel 
{
    ISteeringWheelIdentifier Identifier {get;}
}

public class ManufacturerIdentifier : ISteeringWheelIdentifier
{
    public string ManufacturerEmail {get; set;}
}

public class PartNumberIdentifier : ISteeringWheelIdentifier
{
    public string PartNumber {get; set;}
}

public class ClassicSteeringWheel : ISteeringWheel 
{
    public ClassicSteeringWheel(ManufacturerIdentifier identifier)
    {
        Identifier = identifier;
    }

    public string HornButtonManufacturer {get; set;}

    public ISteeringWheelIdentifier Identifier {get;private set;}
}

public class ModernSteeringWheel : ISteeringWheel
{
    public ModernSteeringWheel(PartNumberIdentifier identifier)
    {
        Identifier = identifier;
    }

    public …
Run Code Online (Sandbox Code Playgroud)

.net c# json json.net

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