How to call an async service function from an ASP .NET razor *.cshtml master page in Full .NET Framework 4.7.2

 

If you need to call an async C# service method from an ASP .NET razor page, you can use the System.Threading.Tasks.Task.Run method.

Assuming we have a C# service class “MyService.cs” and this service contains an async method called “GetMyData”, then you can call it in a razor page like so:

 

@{

    var myService = new MyService();

var myData = System.Threading.Tasks.Task.Run(() => myService.GetMyData()).GetAwaiter().GetResult();

}

 

 

How to quickly debug an ASP .NET Core MVC Api Controller by using an Unit Test project

 

When you have an ASP .NET Core MVC api controller and you want to quickly debug the controller endpoint, you can use the code below.

Just make sure, you set the “Copy to Output Directory” to “Copy always” or “Copy if newer” on the appsettings.json file, inside the unit test project.

 

Code

 

using System;

using System.Net.Http;

using System.Threading.Tasks;

using Microsoft.AspNetCore.Hosting;

using Microsoft.AspNetCore.TestHost;

using Microsoft.Extensions.Configuration;

using Microsoft.VisualStudio.TestTools.UnitTesting;

using XmlInterface.WebApi;

 

namespace UnitTest

{

    [TestClass]

    public class SpikeUnitTest

    {

        /// <summary>

        /// https://geeklearning.io/a-different-approach-to-test-your-asp-net-core-application/

        /// </summary>

        [TestMethod]

        public async Task Run()

        {

            IConfigurationRoot configuration = new ConfigurationBuilder()

            .SetBasePath(AppContext.BaseDirectory)

            .AddJsonFile(“appsettings.json”)

            .Build();

 

            // UseConfiguration

            var webHostBuilder = new WebHostBuilder();

            webHostBuilder

                .UseConfiguration(configuration)

                .UseStartup<Startup>();

 

            var testServer = new TestServer(webHostBuilder);

            HttpClient httpClient = testServer.CreateClient();

            var response = await httpClient.GetAsync(“/api/Test”);

 

            Assert.IsTrue(true);

        }

    }

}

<

p style=”background: #1e1e1e”>
 

 

 

 

 

How to fix: Can’t bind to ‘data’ since it isn’t a known property of ‘markdown’

After an Angular 11 update, the code:

<markdown
[data]=“model.someText”></markdown>

 

would throw an exception “Can’t bind to ‘data’ since it isn’t a known property of ‘markdown'” only in production builds.

Fixed this by adding

@NgModule({
  ...
  imports: [
    ...
    ...

                MarkdownModule.forRoot(),
  ],
  ...
})
export class AppModule {}

 

 

In the AppModule en in de Module containing the component with the template using the “markdown” tag, added:

 

@NgModule({
  ...
  imports: [
    ...

                , MarkdownModule.forChild()
                
  ],
  ...
})
export class CoreModule { }

Custom IHttpHandler 404 not found in .NET Framework 4.7.2

 

When you add a custom IHttpHandler to your ASP .NET Framework 4.7.2 project in a root folder like /Handlers/MyHandler.ashx and you access the url /Handlers/MyHandler.ashx, this handler will be executed,

But if you want this handler to be executed on another path, you will have to register the custom IHttpHandler.

 

In my case on IIS 10 with application pool in integrated mode (Managed Pipeline Mode = Integrated):

<system.webServer>
  ...
  <handlers>
    ...
    <add name="DownloadFile" verb="*" path="Helpers/DownloadFile.ashx" type="My.Custom.NameSpace.MyHandler, My.Assembly " resourceType="Unspecified" />
  </handlers>
</system.webServer>

 

But if you are also using MVC routing, you will have to ignore this route in the MVC routing:

 

public static void RegisterRoutes(RouteCollection routes)
{
            routes.IgnoreRoute("Handlers/MyHandler.ashx");

 

 

 

Solution

https://stackoverflow.com/questions/2858738/problem-mapping-httphandler-http-error-404-not-found/5247330

 

Fix .NET 4.7.3 MVC PowerShell msbuild csproj – ASPNETCOMPILER : error ASPRUNTIME: ‘/temp’ is not a valid IIS application.

 

 

On a specific system, when using msbuild in the folder: “C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin”, I was getting the error:

….csproj” (Build target) (1) ->

   (MvcBuildViews target) -&gt;


     ASPNETCOMPILER : error ASPRUNTIME: '/temp' is not a valid IIS application. [C:\Dev\pri\ZvdZOnline\Source\ZvdZOnline\Zv 


   dZOnline.Web\ZvdZOnline.Web.csproj]

 

But when I build the project by using msbuild found in “C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin” the error was resolved.

 

To resolve the error with the msbuild found in “C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin”, I replaced the folder by one found on an other system, that did not have the error.

.NET 4.7.3 How to fix: The CodeDom provider type “Microsoft.VisualC.CppCodeProvider, CppCodeProvider, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a” could not be located.

 

Solution

  • Close Visual Studio 2019
  • Remove package.lock.json
  • Execute: npm i
  • Open Visual Studio 2019
  • Rebuild project

 

 

 

Error

The CodeDom provider type “Microsoft.VisualC.CppCodeProvider, CppCodeProvider, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a” could not be located.

File: …\ASPNETCOMPILER

PowerShell – Negate boolean – use -Not

 

https://stackoverflow.com/questions/8095638/how-do-i-negate-a-condition-in-powershell

 

 

function FolderExists {

    param($folder)

 

    $folderExists = Test-Path “$($folder)”

    If ($folderExists -eq $True) {

        Write-Host “Folder [$($folder)] exists.”

    } Else {

        Write-Host “Folder [$($folder)] does NOT exist.”

    }

    return $folderExists

}

 

if(-Not (FolderExists -folder “C:\ThisFolderDoesNotExistOnThisSystem”)) {

    Write-Host “Folder does not exists!!!!!”

<

p style=”background: #1e1e1e”>}

 

 

 

 

NET 5.0 – Windows Server 2008 R2 Standard – Unable to load ‘D:\Websites\VBV\.\hostfxr.dll’. This might be caused by a bitness mismatch between IIS application pool and published application.

 

Solution

By default the application was created with “Enable 32-Bit Applications” set to true.

After changing this to “false”, the error was resolved.

 

 

Error

Failed to start application ‘/LM/W3SVC/3/ROOT’, ErrorCode ‘0x800700c1’.

Could not find ‘aspnetcorev2_inprocess.dll’. Exception message:

Unable to load ‘D:\Websites\VBV.\hostfxr.dll’. This might be caused by a bitness mismatch between IIS application pool and published application.

 

 


 

.NET 2.2 => NET 5.0 – Endpoint Routing does not support ‘IApplicationBuilder.UseMvc(…)

 

Solution

 

Use “endpoint” routing

Old

app.ConfigureExceptionHandler(loggerFactory);

app.UseHttpsRedirection();

app.UseStaticFiles();

app.UseSpaStaticFiles();

app.UseAuthentication();

app.UseCors(“CorsPolicy”);

app.UseMvc(routes =>

{

routes.MapRoute(

name: “default”,

template: “{controller}/{action=Index}/{id?}”);

});

 

New

 

app.ConfigureExceptionHandler(loggerFactory);

app.UseHttpsRedirection();

app.UseStaticFiles();

app.UseSpaStaticFiles();

app.UseRouting();

app.UseCors(“CorsPolicy”);

app.UseAuthentication();

app.UseEndpoints(endpoints => {

endpoints.MapControllerRoute(

name: “default”,

pattern: “{controller}/{action=Index}/{id?}”);

});

 

 

 

Error

System.InvalidOperationException

HResult=0x80131509

Message=Endpoint Routing does not support ‘IApplicationBuilder.UseMvc(…)’. To use ‘IApplicationBuilder.UseMvc’ set ‘MvcOptions.EnableEndpointRouting = false’ inside ‘ConfigureServices(…).

Source=Microsoft.AspNetCore.Mvc.Core

StackTrace:

at Microsoft.AspNetCore.Builder.MvcApplicationBuilderExtensions.UseMvc(IApplicationBuilder app, Action`1 configureRoutes)

at BestandenDelen.Web.Startup.Configure(IApplicationBuilder app, IConfiguration configuration, IDatabaseService databaseService, IEnvironmentService environmentService, ILoggerFactory loggerFactory) in C:\Dev\bestanden-delen\BestandenDelen.Web\Startup.cs:line 157

at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor, Boolean wrapExceptions)

at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)

at Microsoft.AspNetCore.Hosting.ConfigureBuilder.Invoke(Object instance, IApplicationBuilder builder)

at Microsoft.AspNetCore.Hosting.ConfigureBuilder.<>c__DisplayClass4_0.<Build>b__0(IApplicationBuilder builder)

at Microsoft.AspNetCore.Hosting.GenericWebHostBuilder.<>c__DisplayClass15_0.<UseStartup>b__1(IApplicationBuilder app)

at Microsoft.AspNetCore.Mvc.Filters.MiddlewareFilterBuilderStartupFilter.<>c__DisplayClass0_0.<Configure>g__MiddlewareFilterBuilder|0(IApplicationBuilder builder)

at Microsoft.AspNetCore.Server.IIS.Core.IISServerSetupFilter.<>c__DisplayClass2_0.<Configure>b__0(IApplicationBuilder app)

at Microsoft.AspNetCore.HostFilteringStartupFilter.<>c__DisplayClass0_0.<Configure>b__0(IApplicationBuilder app)

at Microsoft.AspNetCore.Hosting.GenericWebHostService.<StartAsync>d__31.MoveNext()