Asp.net core 在asp.net核心F中找不到控制器#
我正在尝试用asp.net内核在F#中设置一个单元测试。使用下面的代码。但是服务器的代码失败,找不到404。 框架发现控制器的原因是什么Asp.net core 在asp.net核心F中找不到控制器#,asp.net-core,f#,Asp.net Core,F#,我正在尝试用asp.net内核在F#中设置一个单元测试。使用下面的代码。但是服务器的代码失败,找不到404。 框架发现控制器的原因是什么 module Tests open System open Xunit open Microsoft.AspNetCore.Builder open Microsoft.AspNetCore.Hosting open Microsoft.AspNetCore.Mvc open Microsoft.Extensions.DependencyInjection
module Tests
open System
open Xunit
open Microsoft.AspNetCore.Builder
open Microsoft.AspNetCore.Hosting
open Microsoft.AspNetCore.Mvc
open Microsoft.Extensions.DependencyInjection
type Startup () =
member __.ConfigureServices(services: IServiceCollection) =
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2) |> ignore
member __.Configure(app: IApplicationBuilder, env: IHostingEnvironment) =
app.UseMvc() |> ignore
[<Route("api")>]
[<ApiController>]
type TestController() =
inherit ControllerBase()
[<HttpGet("testGet")>]
member __.TestGet() =
121221
[<HttpPost("testPost")>]
member __.TestPost() =
String.Empty
let buildHost(baseAdress:string) =
Microsoft.AspNetCore.WebHost
.CreateDefaultBuilder()
.UseStartup<Startup>()
.UseUrls(baseAdress)
.Build()
[<Fact>]
let ``My test`` () =
let baseAdress = "https://localhost:9000"
use host = buildHost(baseAdress)
host.RunAsync() |> ignore
let client = new System.Net.Http.HttpClient(BaseAddress = new System.Uri(baseAdress))
let result = client.GetAsync("api/testGet").Result
Assert.Equal(System.Net.HttpStatusCode.OK, result.StatusCode)
Assert.True(result.IsSuccessStatusCode, result.Content.ReadAsStringAsync().Result )
模块测试
开放系统
开放式Xunit
打开Microsoft.AspNetCore.Builder
打开Microsoft.AspNetCore.Hosting
打开Microsoft.AspNetCore.Mvc
打开Microsoft.Extensions.DependencyInjection
类型Startup()=
成员配置服务(服务:IServiceCollection)=
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2)|>忽略
成员配置(应用程序:IApplicationBuilder,环境:IHostingEnvironment)=
app.UseMvc()|>忽略
[]
[]
类型TestController()=
继承ControllerBase()
[]
成员_u.TestGet()=
121221
[]
成员_u.TestPost()=
字符串。空
let buildHost(baseAddress:string)=
Microsoft.AspNetCore.WebHost
.CreateDefaultBuilder()
.UseStartup()
.useURL(基本地址)
.Build()
[]
让“我的测试”()=
让BaseAddress=”https://localhost:9000"
使用主机=构建主机(基本地址)
host.RunAsync()|>忽略
让client=new System.Net.Http.HttpClient(BaseAddress=new System.Uri(BaseAddress))
让result=client.GetAsync(“api/testGet”).result
Assert.Equal(System.Net.HttpStatusCode.OK,result.StatusCode)
Assert.True(result.issusccessstatuscode、result.Content.ReadAsStringAsync().result)
以下是fsproj文件的内容
netcoreapp2.2
错误的
错误的
名称空间
,而不是模块
命名空间应用程序//
除了上面注释的原因外,您需要将控制器直接放入名称空间
,而不是模块
namespace App//位于提供的答案之上。可以通过在configureServices中配置应用程序管理器来解决此问题,如
member this.ConfigureServices(services: IServiceCollection) =
services
.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
.ConfigureApplicationPartManager(fun m ->
m.FeatureProviders.Add
{
new Microsoft.AspNetCore.Mvc.Controllers.ControllerFeatureProvider() with
member __.IsController (typeInfo:System.Reflection.TypeInfo) =
(typeof<ControllerBase>.IsAssignableFrom(typeInfo)) || base. IsController(typeInfo)
}
) |> ignore
services.AddRouteAnalyzer() |> ignore
成员this.ConfigureServices(服务:IServiceCollection)=
服务
.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
.ConfigureApplicationPartManager(乐趣m->
m、 功能提供者。添加
{
新的Microsoft.AspNetCore.Mvc.Controllers.ControllerFeatureProvider()和
成员\uuuu.IsController(typeInfo:System.Reflection.typeInfo)=
(typeof.IsAssignableFrom(typeInfo))| | base.IsController(typeInfo)
}
)|>忽略
services.AddRouteAnalyzer()|>忽略
在提供的答案之上。可以通过在configureServices中配置应用程序管理器来解决此问题,如
member this.ConfigureServices(services: IServiceCollection) =
services
.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
.ConfigureApplicationPartManager(fun m ->
m.FeatureProviders.Add
{
new Microsoft.AspNetCore.Mvc.Controllers.ControllerFeatureProvider() with
member __.IsController (typeInfo:System.Reflection.TypeInfo) =
(typeof<ControllerBase>.IsAssignableFrom(typeInfo)) || base. IsController(typeInfo)
}
) |> ignore
services.AddRouteAnalyzer() |> ignore
成员this.ConfigureServices(服务:IServiceCollection)=
服务
.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
.ConfigureApplicationPartManager(乐趣m->
m、 功能提供者。添加
{
新的Microsoft.AspNetCore.Mvc.Controllers.ControllerFeatureProvider()和
成员\uuuu.IsController(typeInfo:System.Reflection.typeInfo)=
(typeof.IsAssignableFrom(typeInfo))| | base.IsController(typeInfo)
}
)|>忽略
services.AddRouteAnalyzer()|>忽略
将project SDK元素更改为使用Microsoft.NET.SDK.Web
。将project SDK更改为Microsoft.NET.SDK.Web无济于事主机是否也可能没有及时启动以处理您向其发出的请求?将project SDK元素更改为使用Microsoft.NET.SDK.Web
。将project SDK更改为Microsoft.NET.Sdk.Web没有帮助也可能是主机没有及时启动来处理您向其发出的请求吗?卓越的方法卓越的方法
member this.ConfigureServices(services: IServiceCollection) =
services
.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
.ConfigureApplicationPartManager(fun m ->
m.FeatureProviders.Add
{
new Microsoft.AspNetCore.Mvc.Controllers.ControllerFeatureProvider() with
member __.IsController (typeInfo:System.Reflection.TypeInfo) =
(typeof<ControllerBase>.IsAssignableFrom(typeInfo)) || base. IsController(typeInfo)
}
) |> ignore
services.AddRouteAnalyzer() |> ignore