![](/img/trans.png)
[英]How to consume, read and unzip a third party API response in ASP.Net MVC application
[英]How to incorporate a third party api call during build time in ASP.Net MVC Application
好的,這是我的故事。
我有一個運行良好的ASP.Net MVC Web應用程序 。 但是它需要一些.resx文件(某些翻譯的文化/語言)文件,該文件是通過對API Call to a third party end point
進行API Call to a third party end point
。 everytime my web project builds
需要將這些.resx文件放入應用程序的相應文件夾中。 由於這些resx文件可能會在第三方位置更改,因此,每次在Web應用程序上運行構建時,我都需要獲取新文件 。
項目1:所以到目前為止,我有一個運行良好的MVC Web應用程序。 (主要應用)
項目2:我創建了另一個小型控制台應用程序(只是一個基本的控制台應用程序),該應用程序的一個端點可以調用第三方並獲取.resx文件並保存到某個位置。
問題1:
為了完成我想要的工作,我需要有一個單獨的Project 2,它將進行第三方調用並將文件復制到Project 1的相應目錄。
問題2:
調用第三方的Project 2需要是控制台應用程序還是mvc應用程序或什么? 我不確定
問題3:
我朝着正確的方向前進嗎? 在構建項目1時,我只想要它,我想調用第三方API並將一些文件下載到特定文件夾。
問題4:
我需要先運行MS-Build才能執行Project 2. exe,然后執行Project 1.exe。 以便在項目1.exe開始構建時存在文件?
問題5:
我是否真的需要一個完全獨立的項目來使API CALL獲得resx文件?
請指導我。
項目2的代碼:
class Program
{
static void Main(string[] args)
{
Task.Run(() => CallHttp());
System.Console.ReadLine();
}
// Simple async function returning a string...
static public async void CallHttp()
{
var client = new HttpClient();
client.BaseAddress = new Uri("https://api.crowdin.com/");
HttpResponseMessage response = await client.GetAsync("api/project/refele/download/all.zip?key=f23e2c91833c0de737");
using (Stream stream = await response.Content.ReadAsStreamAsync())
using (FileStream fs = new FileStream(@".\..\..\alpha\test.zip", FileMode.Create))
await stream.CopyToAsync(fs);
System.IO.Compression.ZipFile.ExtractToDirectory(@".\..\..\alpha\test.zip", @".\..\..\beta");
}
}
在project1 csproj文件中,您可以按照以下方式指定后建事件:
<PropertyGroup>
<PostBuildEvent>
Call "FullyResolvedPathToYour.exe" "Arg1" "Arg2"
</PostBuildEvent>
</PropertyGroup>
我不知道您的exe的調用方式,因此您需要進行調整以滿足您的要求。 還要注意,您可以通過以下格式使用Visual Studio環境變量和系統環境變量: $(Variable)
有關此概念的更多信息,您可以在此處閱讀: https : //docs.microsoft.com/zh-cn/visualstudio/ide/how-to-specify-build-events-csharp?view=vs-2017
如果需要,可以使用CURL對端點進行API調用。 因此,您不必編寫自定義exe文件即可下載resx。 它的用法超出了這個答案。 我不是那方面的專家。 無論如何,您可以在構建csproj文件之后調用它。
如果在構建后調用API,請不要使用<PostBuildEvent>
。 就像用錘子進行手術一樣。 過度殺傷力。 請改用目標。
<Target Name="Call your Stuff" AfterTargets="Build">
<Exec Command="FullyResolvedPathToYour.EXE arg1 arg2 etc" WorkingDirectory="..." />
</Target>
如果您需要在構建之前調用此目標,只需將AfterTargets
更改為BeforeTargets
有很多關於BeforeTargets
for Targets的msbuild文檔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.