我通过Self Host Web API 找到了关于客户端/服务器实现的精彩文章http://www.asp.net/web-api/overview/older-versions/self-host-a-web-api
我想知道这个模型(Self Host Web API)的正确身份验证方法.
我是否使用了承载令牌身份验证?还有其他方法吗?
或者例如http://www.asp.net/web-api/overview/security/individual-accounts-in-web-api
我有以下工作要求:
C#http客户端必须连接到Self Host Web API Windows服务并发送文件.
连接必须100%安全.
那么如何保护WebAPI,任何线索?
当我在调试时,要更改默认端口,我修改了launchSettings.json文件,并更改端口
"WebApplication1": {
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "weatherforecast",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://*:8081;http://*:8080"
}
Run Code Online (Sandbox Code Playgroud)
但是如果我在文件夹 (selfHost) 中发布应用程序并启动可执行文件,它总是侦听端口 5000 有人知道如何更改生产中的默认端口。我尝试在 program.cs 中使用UseUrls更改它但不起作用
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
}).UseWindowsService()
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>()
.UseUrls("http://*:8080","https://*:8081");
})
.UseSerilog();
Run Code Online (Sandbox Code Playgroud) c# asp.net-core self-host-webapi asp.net-core-webapi asp.net-core-3.0
我设法在控制台应用程序中使用OWIN运行我自己托管的WEP API,方法是使用如下代码:
//string baseAddress = "http://192.168.1.6:8111/";
string baseAddress = "http://+:8111/";
// Start OWIN host
using (Microsoft.Owin.Hosting.WebApp.Start<Startup>(url: baseAddress))
{
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
通过在服务主机上使用和注册类似" http:// +:9000 / "的地址,我们的想法是使用主机的通用IP地址,当主机的IP可能发生变化时,该地址不会影响客户端.
客户端位于运行服务的其他计算机上.类似于局域网中的移动电话或来自局域网的其他笔记本电脑,以及将来如果可能的话,也可以在局域网之外.
在我的自托管服务的客户端,这是一个html页面,我有一个JavaScript代码,如:
//var uri = 'http://192.168.1.6:8111/api/tests';
var uri = 'http://+:8111/api/tests';
function Read()
{
$.getJSON(uri + '/' + id)
}
Run Code Online (Sandbox Code Playgroud)
通过在客户端使用主机的静态注释IP地址,我可以访问自托管的WEB API,但是当我尝试使用通用的" http:// +:9000/api/tests "时,它无法连接到服务.
有没有办法通过使用这样的通用配置从客户端连接到服务?或者我应该如何配置服务主机和客户端,以便主机上的IP更改不会停止客户端计算机上的服务?
我需要考虑到我的自托管计算机的IP地址可能会更改,客户端将丢失连接,因为他们将使用服务主机的旧的过时IP地址.
我在 asp.net 中创建了一个自托管的 Web API,当我从 POSTMAN 调用它时它工作正常,但是当我从浏览器调用它时出现以下错误。
从源 ' http://localhost:4200 '访问 XMLHttpRequest at ' http://localhost:3273/Values/GetString/1 '已被 CORS 策略阻止:No 'Access-Control-A
下面给出的是我的服务类
using System.Web.Http;
using System.Web.Http.SelfHost;
namespace SFLSolidWorkAPI
{
public partial class SolidWorkService : ServiceBase
{
public SolidWorkService()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
var config = new HttpSelfHostConfiguration("http://localhost:8069");
config.Routes.MapHttpRoute(
name: "API",
routeTemplate: "{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
HttpSelfHostServer server = new HttpSelfHostServer(config);
server.OpenAsync().Wait();
}
protected override void OnStop()
{
}
}
}
Run Code Online (Sandbox Code Playgroud) 当应用程序运行多个线程时,owin 自托管 Web 服务器的响应能力出现了一个奇怪的问题。
我提供了一个简单的例子来说明问题:
申请代码:
using System;
using System.Threading;
using System.Threading.Tasks;
using Test.Api;
namespace Test.Web
{
class Program
{
public static void RunWebServer()
{
Task.Factory.StartNew(() =>
{
StartWebServer();
}, TaskCreationOptions.LongRunning);
}
private static void StartWebServer()
{
WebServer.StartWebServer();
while (true)
{
Thread.Sleep(10);
}
}
private static void StartThreads(int maxthreads)
{
for (int m = 0; m < maxthreads; m++)
{
Task.Factory.StartNew(() =>
{
while (true)
{
Thread.Sleep(1000);
}
});
Thread.Sleep(10);
}
} …Run Code Online (Sandbox Code Playgroud)