主頁 > .NET開發 > 【翻譯】.NET 5 Release Candidate 1中的ASP.NET Core更新

【翻譯】.NET 5 Release Candidate 1中的ASP.NET Core更新

2020-09-15 21:52:22 .NET開發

.NET 5 Release Candidate(RC1)版本現在可以進行使用了,以下是發布的新功能:

  • Blazor WebAssembly性能改進
  • Blazor組件虛擬化
  • Blazor WebAssembly預渲染
  • Blazor WebAssembly的瀏覽器兼容性分析器
  • Blazor JavaScript隔離和物件參考
  • Blazor檔案輸入支持
  • Blazor中的自定義驗證類屬性
  • Blazor對ontogle事件的支持
  • 模型系結DateTime為UTC
  • 控制Startup類的激活
  • ASP.NET Core API專案中的默認開放式API規范(Swagger)
  • ASP.NET Core API專案提供更好的F5體驗
  • SignalR并行集線器呼叫
  • 在SignalR Java客戶端中添加了對Messagepack支持
  • Kestrel終端可進行特定的選項配置

Get started

如果要在.NET 5 RC1中使用ASP.NET Core我們需要安裝.NET5 SDK,.NET RC1也包含了在Visual Studio 2019 16.8 Preview 3中,

我們需要使用Visual Studio 2019 16.8 Preview 3或者更高的版本才能使用.NET5 RC1,最新的Mac版Visual Studio預覽版也支持.NET5,要將.NET 5與Visual Studio Code一起使用,請安裝最新版本的C#擴展,

Upgrade an existing project

ASP.NET Core應用從.NET5 preview8升級到.NET5 RC1,可以通過如下步驟來升級:

  • 將所有Microsoft.AspNetCore.包參考更新為5.0.0-rc.1.
    • 如果使用的是新的Microsoft.AspNetCore.Components.Web.Extensions程式包,需要更新版本到5.0.0-preview.9.*,目前這個包還有RC版本,因為開發團隊希望在準備發布之前對它包含的組件進行更多的設計和更改,
  • 將所有Microsoft.Extensions.程式包參考更新為5.0.0-rc.1.
  • 將System.Net.Http.Json包參考更新為5.0.0-rc.1.*

在Blazor WebAssembly專案中,還可以對專案檔案進行如下的更新:

  • 將SDK從Microsoft.NET.Sdk.Web修改為Microsoft.NET.Sdk.BlazorWebAssembly
  • 洗掉 <RuntimeIdentifier>browser-wasm</RuntimeIdentifier><UseBlazorWebAssembly>true</UseBlazorWebAssembly> 屬性

What’s new?

Blazor WebAssembly performance improvements

對于.NET5開發團隊已經對Blazor WebAssembly運行時性能進行了重大的改進,特別是對于復雜的UI和JSON序列化,在開發團隊的性能測驗中,據了解在大多數情況下,Blazor WebAssembly在.NET5中速度要快2-3倍,

.NET5中的Blazor WebAssembly中的運行時代碼執行通常比Blazor WebAssembly3.2快,這是由于核心框架的優化和.NET IL解釋器的改進,在.NET5 WebAssembly中,如字串比較,字典查找和JSON處理之類的操作通常要快很多,

如下圖所示,在.NET5中WebAssembly JSON的處理幾乎快了一倍:

image

開發團隊還優化了Blazor組件渲染的性能,尤其是對于涉及大量組件的UI,例如使用高密度grids時,

為了測驗.NET5中grid組件呈現的性能,開發團隊使用了三種不同的grid組件實作,每個實作呈現200行和20列:

  • Fast Grid: 一個最小的,高度優化grid實作
  • Plain Table: 一個最小的,但是沒有優化的grid實作
  • Complex Grid: 一個最大的,沒有優化的grid實作,故意應用大量的Blazor特性,故意對渲染器造成不良影響,

從測驗來看grid渲染在.NET5中grid的渲染速度快了2-3倍

image

我們可以在GitHub中找到這些性能測驗的代碼

我們可以期待正在進行的作業來改善Blazor WebAssembly的性能,.NET團隊除了優化Blazor WebAssembly運行時和框架之外,還與瀏覽器實作者合作,以進一步加快WebAssembly的執行速度,對于.NET6開發團隊打算向WebAssembly提供對提前編譯(AoT)的支持,這將進一步提高性能,

Blazor component virtualization

我們可以使用新的內置虛擬化支持進一步提高組件呈現的性能,虛擬化是一種將UI呈現限制為當前可見的部分的技術,例如,當我們有一個包含許多行的長串列或表,但在任何給定時間只有一個小子集可見時,.NET 5中的Blazor添加了一個新的虛擬化組件,可以輕松地將虛擬化添加到組件中,

典型的基于串列或表的組件可能使用c# foreach回圈來呈現串列中的每一項或表中的每一行,就像這樣:

@foreach (var employee in employees)
{
    <tr>
        <td>@employee.FirstName</td>
        <td>@employee.LastName</td>
        <td>@employee.JobTitle</td>
    </tr>
}

如果串列增加到包含數千行,那么呈現它的可能需要一段時間,從而導致UI明顯的延遲行為,

相反我們可以用Virtualize組件替換foreach回圈,該組件僅呈現當前可見的行,

<Virtualize Items="employees" Context="employee">
    <tr>
        <td>@employee.FirstName</td>
        <td>@employee.LastName</td>
        <td>@employee.JobTitle</td>
    </tr>
</Virtualize>

Virtualize組件根據容器的高度和已渲染專案的大小來計算要渲染的items數量,

如果您不想將所有items都加載到記憶體中,則可以指定一個ItemsProvider,如下所示:

<Virtualize ItemsProvider="LoadEmployees" Context="employee">
     <tr>
        <td>@employee.FirstName</td>
        <td>@employee.LastName</td>
        <td>@employee.JobTitle</td>
    </tr>
</Virtualize>

items提供者是一種委托方法,可以按需異步檢索請求的items, Items提供程式會收到ItemsProviderRequest,該請求指定從特定起始索引開始的所需Items數量, 然后,專案提供程式從資料庫或其他服務中檢索請求的items,并將它們作為ItemsProviderResult <TItem>連同可用items總數一起回傳, items提供者可以選擇在每個請求中檢索items,或將其快取以方便使用,

async ValueTask<ItemsProviderResult<Employee>> LoadEmployees(ItemsProviderRequest request)
{
    var numEmployees = Math.Min(request.Count, totalEmployees - request.StartIndex);
    var employees = await EmployeesService.GetEmployeesAsync(request.StartIndex, numEmployees, request.CancellationToken);
    return new ItemsProviderResult<Employee>(employees, totalEmployees);
}

因為從遠程資料源請求items可能需要一些時間,所以我們還可以選擇渲染占位符,知道items資料可用為止,

<Virtualize ItemsProvider="LoadEmployees" Context="employee">
    <ItemContent>
        <tr>
            <td>@employee.FirstName</td>
            <td>@employee.LastName</td>
            <td>@employee.JobTitle</td>
        </tr>
    </ItemContent>
    <Placeholder>
        <tr>
            <td>Loading...</td>
        </tr>
    </Placeholder>
</Virtualize>

Blazor WebAssembly prerendering

組件標簽幫助器現在支持兩種額外的渲染模式預先從Blazor WebAssembly應用程式中呈現組件:

  • WebAssemblyPrerendered: 將組件預渲染為靜態HTML,并包含Blazor WebAssembly應用程式的標記,以便以后在加載到瀏覽器中時使組件具有互動性
  • WebAssembly: 渲染Blazor WebAssembly應用程式的標記,以便在加載到瀏覽器中時包含一個互動式組件, 該組件未呈現, 這個選項使在不同的cshtml頁面上呈現不同的Blazor WebAssembly組件更加容易,

要在Blazor WebAssembly應用中設定預渲染,請執行以下操作:

1.將Blazor WebAssembly應用程式托管在ASP.NET Core應用程式中,

2.將客戶端專案中的默認靜態index.html檔案替換為服務器專案中的_Host.cshtml檔案,

3.更新服務器啟動邏輯,以回退到_Host.cshtml而不是index.html(類似于Blazor Server模板的設定方式),

4.更新_Host.cshtml以使用組件標簽助手來預渲染根App組件:

<component type="typeof(App)" render-mode="WebAssemblyPrerendered" />

如果引數是可序列化的,則在使用基于WebAssembly的呈現方式時,還可以將引數傳遞給組件標簽幫助器, 這些引數必須是可序列化的,以便可以將其傳輸到客戶端并用于在瀏覽器中初始化組件, 如果要進行預渲染,則還需要確保撰寫了組件,以便它們可以在不訪問瀏覽器的情況下優雅地執行服務器端,

<component type="typeof(Counter)" render-mode="WebAssemblyPrerendered" param-IncrementAmount="10" />

除了改善Blazor WebAssembly應用程式加載時間之外,我們還可以使用帶有新渲染模式的component tag helper來在不同的頁面和視圖上添加多個組件,我們不需要將這些組件配置為應用程式的根組件,也不需要在頁面上添加我們自己的標記,框架會為我們處理這些,

Browser compatibility analyzer for Blazor WebAssembly

Blazor WebAssembly應用在.NET5中的目標是完整的.NET5 API,但是由于瀏覽器沙箱的限制,WebAssembly上并不是支持所有的.NET5 API,.NET 5現在包含了一個平臺兼容性分析器,當你的應用程式使用了你的目標平臺不支持的api時,它會警告你,對于Blazor WebAssembly應用程式,這意味著檢查瀏覽器是否支持api,

我們還沒有將所有的注釋添加到.NET 5的核心庫中,現在已經注釋了一些API(主要是Windows特定的API)

image

要啟用瀏覽器對庫的兼容性檢查,請在專案檔案中添加瀏覽器作為受支持的平臺(Blazor WebAssembly專案和Razor類別庫專案為您完成這一任務)

<SupportedPlatform Include="browser" />

在創建庫時,我們可以通過應用UnsupportedOSPlatformAttribute來選擇性地指示瀏覽器中不支持某個特定的API

[UnsupportedOSPlatform("browser")]
private static string GetLoggingDirectory()
{
    // ...
}

Blazor JavaScript isolation and object references

Blazor現在可以將JavaScript隔離為標準的JavaScript模塊,這有幾個好處

1.匯入的JavaScript不再污染全域名稱空間,

2.庫和組件的使用者不再需要手動匯入相關的JavaScript,

例如,以下JavaScript模塊匯出一個簡單的JavaScript函式以顯示瀏覽器提示:

export function showPrompt(message) {
    return prompt(message, 'Type anything here');
}

我們可以將這個JavaScript模塊作為一個靜態網路資產(wwwroot/exampleJsInterop.js)添加到我們的.NET庫中,然后使用IJSRuntime服務將該模塊匯入到.NET代碼中,

var module = await jsRuntime.InvokeAsync<JSObjectReference>("import", "./_content/MyComponents/exampleJsInterop.js");

“import”識別符號是專門用于匯入JavaScript模塊的特殊識別符號,我們可以使用穩定的靜態web資產路徑指定模塊 _content/[LIBRARY NAME]/[PATH UNDER WWWROOT].

IJSRuntime將該模塊作為JSObjectReference匯入,該物件代表.NET代碼對JavaScript物件的參考, 然后,我們可以使用JSObjectReference從模塊呼叫匯出的JavaScript函式:

public async ValueTask<string> Prompt(string message)
{
    return await module.InvokeAsync<string>("showPrompt", message);
}

JSObjectReference極大地簡化了與JavaScript庫的互動,在這些庫中,您希望捕獲JavaScript物件參考,然后再從.NET呼叫它們的函式,

Blazor file input support

Blazor現在提供了一個InputFile組件,用于處理檔案上載,或更一般地說,是用于將瀏覽器檔案資料讀取到.NET代碼中,

InputFile組件呈現為一個檔案型別的HTML輸入,默認情況下,用戶可以選擇單個檔案,或者如果您添加了多個屬性,那么用戶可以同時提供多個檔案,當用戶選擇一個或多個檔案時,InputFile組件觸發一個OnChange事件,并傳遞一個InputFileChangeEventArgs,該InputFileChangeEventArgs提供對所選檔案串列的訪問以及關于每個檔案的詳細資訊,

<InputFile OnChange="OnInputFileChange" multiple />

<div class="image-list">
    @foreach (var imageDataUrl in imageDataUrls)
    {
        <img src="@imageDataUrl" />
    }
</div>

@code {
    IList<string> imageDataUrls = new List<string>();

    async Task OnInputFileChange(InputFileChangeEventArgs e)
    {
        var imageFiles = e.GetMultipleFiles();

        var format = "image/png";
        foreach (var imageFile in imageFiles)
        {
            var resizedImageFile = await imageFile.RequestImageFileAsync(format, 100, 100);
            var buffer = new byte[resizedImageFile.Size];
            await resizedImageFile.OpenReadStream().ReadAsync(buffer);
            var imageDataUrl = $"data:{format};base64,{Convert.ToBase64String(buffer)}";
            imageDataUrls.Add(imageDataUrl);
        }
    }
}

要從用戶選擇的檔案中讀取資料,可以對該檔案呼叫OpenReadStream并從回傳的流中讀取資料,在Blazor WebAssembly應用程式中,資料會直接流到瀏覽器中的.NET代碼中,在Blazor服務器應用程式中,當您從流中讀取檔案資料時,檔案資料將流化為服務器上的.NET代碼,如果您使用組件來接收影像檔案,Blazor還提供了一個RequestImageFileAsync便利方法,用于在影像資料流到,net應用程式之前,在瀏覽器的JavaScript運行時內調整影像資料的大小,

Custom validation class attributes in Blazor

現在可以在Blazor中指定自定義驗證類名,這在與CSS框架(如Bootstrap)集成時非常有用,

要指定自定義驗證類名,請創建一個從FieldCssClassProvider派生的類,并在EditContext實體上設定它,

var editContext = new EditContext(model);
editContext.SetFieldCssClassProvider(new MyFieldClassProvider());

// ...

class MyFieldClassProvider : FieldCssClassProvider
{
    public override string GetFieldCssClass(EditContext editContext, in FieldIdentifier fieldIdentifier)
    {
        var isValid = !editContext.GetValidationMessages(fieldIdentifier).Any();
        return isValid ? "legit" : "totally-bogus";
    }
}

Blazor support for ontoggle event

Blazor現在支持ontoggle事件:

<div>
    @if (detailsExpanded)
    {
        <p>Read the details carefully!</p>
    }
    <details id="details-toggle" @ontoggle="OnToggle">
        <summary>Summary</summary>
        <p>Detailed content</p>
    </details>
</div>

@code {
    bool detailsExpanded;
    string message { get; set; }

    void OnToggle()
    {
        detailsExpanded = !detailsExpanded;
    }
}

Model binding DateTime as UTC

ASP.NET Core中的模型系結現在支持將UTC時間字串正確系結到DateTime, 如果請求包含UTC時間字串(例如https://example.com/mycontroller/myaction?time=2019-06-14T02%3A30%3A04.0576719Z),則模型系結將正確地將其系結到UTC DateTime而無需 需要進一步定制,

Control Startup class activation

提供了一個額外的UseStartup多載,它允許您提供一個工廠方法來控制啟動類的激活,如果我們想要傳遞與主機一同初始化的其他啟動引數,這將非常有用,

public class Program
{
    public static async Task Main(string[] args)
    {
        var logger = CreateLogger();
        var host = Host.CreateDefaultBuilder()
            .ConfigureWebHost(builder =>
            {
                builder.UseStartup(context => new Startup(logger));
            })
            .Build();

        await host.RunAsync();
    }
}

Open API Specification On-by-default

Open API規范是一種行業采用的約定,用于描述HTTP API并將它們集成到復雜的業務流程或與第三方進行集成,開放API得到了所有云提供商和許多API注冊中心的廣泛支持,因此從其Web API中發布開放API檔案的開發人員有許多新的機會可以使用這些API,與開源專案Swashbuckle.AspNetCore維護人員合作,我們激動地宣布,我們很高興地宣布,RC1中的ASP.NET Core API模板預先連接了對Swashbuckle的NuGet依賴關系,Swashbuckle是一種流行的開源NuGet包,可動態發出Open API檔案, Swashbuckle通過對您的API控制器進行自省并在運行時或在構建時使用Swashbuckle CLI生成Open API檔案來做到這一點,

在.NET 5 RC1中,運行dotnet new webapi將導致默認啟用開放API輸出,但如果您希望禁用開放API,請使用dotnet new webapi——no-openapi true,所有為Web API專案創建的.csproj檔案都將附帶NuGet包參考,

<ItemGroup>
    <PackageReference Include="Swashbuckle.AspNetCore" Version="5.5.1" />
</ItemGroup>

除了.csproj檔案中的NuGet包參考之外,我們還向Startup.cs中激活開放API檔案生成的ConfigureServices方法添加了代碼,

public void ConfigureServices(IServiceCollection services)
{

    services.AddControllers();
    services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1", new OpenApiInfo { Title = "WebApplication1", Version = "v1" });
    });
}

配置方法還預先連接到Swashbuckle中間件中,這將啟動檔案生成程序,并在開發模式下默認打開Swagger UI頁面,這樣,當我們發布到生產環境中時,開箱即用的體驗就不會意外地暴露我們的API描述,

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseSwagger();
        app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "WebApplication1 v1"));
    }

    // ...
}

Azure API Management Import

在ASP.NET Core API專案以這種方式連接到輸出開放API, Visual Studio 2019版本16.8 Preview 2.1的發布體驗將在發布流程中自動提供額外的步驟,使用Azure API管理的開發人員有機會在發布流期間自動將他們的API匯入到Azure API管理中,

image

這一額外的發布步驟減少了HTTP API開發人員發布API并與Azure邏輯應用程式或PowerApps一起使用所需要執行的步驟,

Better F5 Experience for Web API Projects

通過默認啟用開放API,我們能夠顯著改善Web API開發人員的F5體驗,在.NET 5 RC1中,Web API模板是預先配置來加載Swagger UI頁面的,Swagger UI頁面不僅提供了我們為API添加的檔案,還允許我們通過單擊進行API測驗,

image

SignalR parallel hub invocations

在.NET 5 RC1中,NET Core SignalR現在能夠處理并行集線器呼叫,您可以更改默認行為,并允許客戶端一次呼叫多個hub方法,

HubConnection hubConnection = HubConnectionBuilder.create("http://localhost:53353/MyHub")
        .withHubProtocol(new MessagePackHubProtocol())
        .build();

Added Messagepack support in SignalR Java client

我們推出了一個新的軟體包,com.microsoft.signalr.messagepack,它將messagepack支持添加到SignalR java客戶機,要使用messagepack集線器協議,請向連接構建器添加. withhubprotocol(new MessagePackHubProtocol()),

HubConnection hubConnection = HubConnectionBuilder.create("http://localhost:53353/MyHub")
        .withHubProtocol(new MessagePackHubProtocol())
        .build();

Kestrel endpoint-specific options via configuration

增加了對通過配置配置Kestrel的特定端點選項的支持,特定于終結點的配置包括所使用的Http協議、所使用的TLS協議、所選擇的證書和客戶機證書模式,

我們可以根據指定的服務器名稱配置所選擇的證書,作為客戶機指示的TLS協議的服務器名稱指示(SNI)擴展的一部分,Kestrel配置還支持主機名中的通配符前綴,

下面的示例向我們展示了如何使用組態檔指定特定于終結點的內容

{
  "Kestrel": {
    "Endpoints": {
      "EndpointName": {
        "Url": "https://*",
        "Sni": {
          "a.example.org": {
            "Protocols": "Http1AndHttp2",
            "SslProtocols": [ "Tls11", "Tls12"],
            "Certificate": {
              "Path": "testCert.pfx",
              "Password": "testPassword"
            },
            "ClientCertificateMode" : "NoCertificate"
          },
          "*.example.org": {
            "Certificate": {
              "Path": "testCert2.pfx",
              "Password": "testPassword"
            }
          },
          "*": {
            // At least one subproperty needs to exist per SNI section or it
            // cannot be discovered via IConfiguration
            "Protocols": "Http1",
          }
        }
      }
    }
  }
}

原文:https://devblogs.microsoft.com/aspnet/asp-net-core-updates-in-net-5-release-candidate-1/

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/50397.html

標籤:.NET Core

上一篇:ASP.NET網頁WEB程式,一般用DIV/CSS語言制作網頁頁,請問可以用Visual Studio 2017在ASP.NET工程專案中制作WEB網頁頁面嗎?

下一篇:vs2013打包部署提示"Extracting COM data from 2 component(s)"

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • WebAPI簡介

    Web體系結構: 有三個核心:資源(resource),URL(統一資源識別符號)和表示 他們的關系是這樣的:一個資源由一個URL進行標識,HTTP客戶端使用URL定位資源,表示是從資源回傳資料,媒體型別是資源回傳的資料格式。 接下來我們說下HTTP. HTTP協議的系統是一種無狀態的方式,使用請求/ ......

    uj5u.com 2020-09-09 22:07:47 more
  • asp.net core 3.1 入口:Program.cs中的Main函式

    本文分析Program.cs 中Main()函式中代碼的運行順序分析asp.net core程式的啟動,重點不是剖析原始碼,而是理清程式開始時執行的順序。到呼叫了哪些實體,哪些法方。asp.net core 3.1 的程式入口在專案Program.cs檔案里,如下。ususing System; us ......

    uj5u.com 2020-09-09 22:07:49 more
  • asp.net網站作為websocket服務端的應用該如何寫

    最近被websocket的一個問題困擾了很久,有一個需求是在web網站中搭建websocket服務。客戶端通過網頁與服務器建立連接,然后服務器根據ip給客戶端網頁發送資訊。 其實,這個需求并不難,只是剛開始對websocket的內容不太了解。上網搜索了一下,有通過asp.net core 實作的、有 ......

    uj5u.com 2020-09-09 22:08:02 more
  • ASP.NET 開源匯入匯出庫Magicodes.IE Docker中使用

    Magicodes.IE在Docker中使用 更新歷史 2019.02.13 【Nuget】版本更新到2.0.2 【匯入】修復單列匯入的Bug,單元測驗“OneColumnImporter_Test”。問題見(https://github.com/dotnetcore/Magicodes.IE/is ......

    uj5u.com 2020-09-09 22:08:05 more
  • 在webform中使用ajax

    如果你用過Asp.net webform, 說明你也算是.NET 開發的老兵了。WEBform應該是2011 2013左右,當時還用visual studio 2005、 visual studio 2008。后來基本都用的是MVC。 如果是新開發的專案,估計沒人會用webform技術。但是有些舊版 ......

    uj5u.com 2020-09-09 22:08:50 more
  • iis添加asp.net網站,訪問提示:由于擴展配置問題而無法提供您請求的

    今天在iis服務器配置asp.net網站,遇到一個問題,記錄一下: 問題:由于擴展配置問題而無法提供您請求的頁面。如果該頁面是腳本,請添加處理程式。如果應下載檔案,請添加 MIME 映射。 WindowServer2012服務器,添加角色安裝完.netframework和iis之后,運行aspx頁面 ......

    uj5u.com 2020-09-09 22:10:00 more
  • WebAPI-處理架構

    帶著問題去思考,大家好! 問題1:HTTP請求和回傳相應的HTTP回應資訊之間發生了什么? 1:首先是最底層,托管層,位于WebAPI和底層HTTP堆疊之間 2:其次是 訊息處理程式管道層,這里比如日志和快取。OWIN的參考是將訊息處理程式管道的一些功能下移到堆疊下端的OWIN中間件了。 3:控制器處理 ......

    uj5u.com 2020-09-09 22:11:13 more
  • 微信門戶開發框架-使用指導說明書

    微信門戶應用管理系統,采用基于 MVC + Bootstrap + Ajax + Enterprise Library的技術路線,界面層采用Boostrap + Metronic組合的前端框架,資料訪問層支持Oracle、SQLServer、MySQL、PostgreSQL等資料庫。框架以MVC5,... ......

    uj5u.com 2020-09-09 22:15:18 more
  • WebAPI-HTTP編程模型

    帶著問題去思考,大家好!它是什么?它包含什么?它能干什么? 訊息 HTTP編程模型的核心就是訊息抽象,表示為:HttPRequestMessage,HttpResponseMessage.用于客戶端和服務端之間交換請求和回應訊息。 HttpMethod類包含了一組靜態屬性: private stat ......

    uj5u.com 2020-09-09 22:15:23 more
  • 部署WebApi隨筆

    一、跨域 NuGet參考Microsoft.AspNet.WebApi.Cors WebApiConfig.cs中配置: // Web API 配置和服務 config.EnableCors(new EnableCorsAttribute("*", "*", "*")); 二、清除默認回傳XML格式 ......

    uj5u.com 2020-09-09 22:15:48 more
最新发布
  • C#多執行緒學習(二) 如何操縱一個執行緒

    <a href="https://www.cnblogs.com/x-zhi/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2943582/20220801082530.png" alt="" /></...

    uj5u.com 2023-04-19 09:17:20 more
  • C#多執行緒學習(二) 如何操縱一個執行緒

    C#多執行緒學習(二) 如何操縱一個執行緒 執行緒學習第一篇:C#多執行緒學習(一) 多執行緒的相關概念 下面我們就動手來創建一個執行緒,使用Thread類創建執行緒時,只需提供執行緒入口即可。(執行緒入口使程式知道該讓這個執行緒干什么事) 在C#中,執行緒入口是通過ThreadStart代理(delegate)來提供的 ......

    uj5u.com 2023-04-19 09:16:49 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    <a href="https://www.cnblogs.com/huangxincheng/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/214741/20200614104537.png" alt="" /&g...

    uj5u.com 2023-04-18 08:39:04 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    一:背景 1. 講故事 前段時間協助訓練營里的一位朋友分析了一個程式卡死的問題,回過頭來看這個案例比較經典,這篇稍微整理一下供后來者少踩坑吧。 二:WinDbg 分析 1. 為什么會卡死 因為是表單程式,理所當然就是看主執行緒此時正在做什么? 可以用 ~0s ; k 看一下便知。 0:000> k # ......

    uj5u.com 2023-04-18 08:33:10 more
  • SignalR, No Connection with that ID,IIS

    <a href="https://www.cnblogs.com/smartstar/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/u36196.jpg" alt="" /></a>...

    uj5u.com 2023-03-30 17:21:52 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:15:33 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:13:31 more
  • C#遍歷指定檔案夾中所有檔案的3種方法

    <a href="https://www.cnblogs.com/xbhp/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/957602/20230310105611.png" alt="" /></a&...

    uj5u.com 2023-03-27 14:46:55 more
  • C#/VB.NET:如何將PDF轉為PDF/A

    <a href="https://www.cnblogs.com/Carina-baby/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2859233/20220427162558.png" alt="" />...

    uj5u.com 2023-03-27 14:46:35 more
  • 武裝你的WEBAPI-OData聚合查詢

    <a href="https://www.cnblogs.com/podolski/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/616093/20140323000327.png" alt="" /><...

    uj5u.com 2023-03-27 14:46:16 more