簡體   English   中英

如何在ASP.Net MVC應用程序的構建期間合並第三方api調用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM