我们的目标是使用Kubernetes横向扩展.NET Core 2.0 Web API.Web API应用程序将由Kestrel提供.
看起来我们可以通过配置Kestrel的关闭超时来优雅地处理pod的终止,所以现在我们正在研究如何探测应用程序以确定准备和活跃度.
仅使用HTTP请求探测Web API是否足够?如果是这样,创建一个新的健康检查控制器以处理这些探测请求是一个好主意,还是探测在正常使用中消耗的实际端点更有意义?
在区分活跃度和准备度探测时,我们应该考虑什么?
kubernetes kestrel-http-server asp.net-core asp.net-core-webapi
我在Asp.net核心中阅读了很多关于API的路径的主题,但我无法使其工作.
首先,这是我的控制器:
Public class BXLogsController : Controller
{
//[HttpGet("api/[controller]/ID/{id}", Name = "GetL")]
public IActionResult GetById(string id)
{
if (id.Trim() == "")
return BadRequest();
else
{
Logs l = AccessBase.AccBase.GetLog(id);
return Json(l);
}
}
//[HttpGet("api/[controller]/API/{apiname}", Name = "GetLAPI")]
public IActionResult GetByAPI(string apiname)
{
if (apiname.Trim() == "")
return BadRequest();
else
{
List<Logs> lstLogs = AccessBase.AccBase.GetLogsApi(apiname);
return Json(lstLogs);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用HttpGetAttribute带路径(请参阅注释),但这不起作用.
所以我想使用MapRoute方法,但这也不起作用.
app.UseMvc(routes =>
{
routes.MapRoute(
name: "LogsId",
template: "api/[controller]/ID/{id}",
defaults: new { controller = "BXLogs", action …Run Code Online (Sandbox Code Playgroud) c# .net-core asp.net-core asp.net-core-webapi asp.net-core-routing
有人可以在csproj文件(VS2017)中解释这两个的目的:
<TargetFramework>netstandard1.6</TargetFramework>
<RuntimeIdentifier>win7</RuntimeIdentifier>
Run Code Online (Sandbox Code Playgroud)
我刚从VS2015迁移,现在无法发布我的web api,因为它看起来我应该只使用一个目标框架.另外我不能指定多个RID.所有这些改变的事情让我感到沮丧.没有什么可以从头开始,应该一遍又一遍地克服一些东西.
我只想在Windows上开发我的web-api,在这里运行xUnit测试,然后部署web-api以在linux(ubuntu)服务器上运行.我应该在csproj的两个参数中加入什么?非常感谢与良好解释的链接.
UPDATE1
我有web api和引用的.net核心库.从VS2015迁移的所有东西.现在我有根项目
<TargetFrameworks>netcoreapp1.1;net461</TargetFrameworks>.当我通过VS2017发布时出现错误:
C:\ Program Files\dotnet\sdk\1.0.3\Sdks\Microsoft.NET.Sdk\buildCrossTargeting\Microsoft.NET.Sdk.targets(31,5):错误:如果未指定"发布"目标,则不支持目标框架.当前项目针对多个框架,请指定已发布应用程序的框架.
但我在发布时指定了目标框架 netcoreapp1.1.好.然后我<PropertyGroup Condition="$(TargetFramework)'=='netcoreapp1.1'">
<RuntimeIdentifier>ubuntu.16.10-x64</RuntimeIdentifier>
</PropertyGroup>按照下面的建议更新了我的csproj .但是现在我甚至无法构建app,得到错误:
5> C:\ Program Files(x86)\ Microsoft Visual Studio\2017\Enterprise\MSBuild\Sdks\Microsoft.NET.Sdk\build\Microsoft.NET.Sdk.targets(92,5):错误:资产文件'\ obj\project.assets.json'没有'.NETCoreApp,Version = v1.1/ubuntu.16.10-x64'的目标.确保已为TargetFramework ='netcoreapp1.1'和RuntimeIdentifier ='ubuntu.16.10-x64'恢复此项目.
我只想在Windows 8.1/windows7上使用VS2017进行开发并部署到ubuntu 16.10.我做错了什么?
UPDATE2
我有8个项目正在解决.其中3个是xUnit测试.因此我们有5个项目.这5个中的4个是类库,1个是我的web-app.所有4个类库都有:
<TargetFrameworks>netstandard1.6;net461</TargetFrameworks>
<ItemGroup Condition=" '$(TargetFramework)' == 'net461' ">
<Reference Include="System" />
<Reference Include="Microsoft.CSharp" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
我的网络应用:
<TargetFrameworks>netcoreapp1.1;net461</TargetFrameworks>
<ItemGroup Condition=" '$(TargetFramework)' == 'net461' ">
<Reference Include="System" />
<Reference Include="Microsoft.CSharp" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
如何发布我的网络应用程序?
.net-core asp.net-core asp.net-core-webapi visual-studio-2017 runtime-identifier
我将用户角色存储在JWT中(以限制API端点).管理员可以更改角色.
如果角色发生了变化.我怎么能在所有代币中反映这一点?我考虑过几个解决方案:
如果我使用刷新令牌,则用户必须等到访问令牌的到期日期到期.
我可以记录已更改的用户ID并检查每个请求,然后在用户更改后返回新令牌.
有没有标准的方法来做到这一点?
我使用默认的ASP.NET Core MVC模板创建了一个项目.我想在下面创建一个RESTful API /api/{Controller}.我添加了一个新的Web API控制器(标准Web API控制器类模板),但我无法调用它.我收到一条错误消息,指出无法找到该页面.我尝试在Startup.cs中添加一个路由,但它没有做任何事情:
app.UseMvc(routes =>
{
routes.MapRoute(name: "default", template: "{controller=Home}/{action=Index}/{id?}");
routes.MapRoute(name: "api", template: "api/{controller=Admin}");
});
Run Code Online (Sandbox Code Playgroud)
编辑:
就像我说的,这都是默认模板.这是我添加的Web API控制器:
[Route("api/[controller]")]
public class AdminController : Controller
{
// GET api/values/5
[HttpGet("{id}")]
public string Get(int id)
{
return "value";
}
// POST api/values
[HttpPost]
public void Post([FromBody]string value)
{
}
// PUT api/values/5
[HttpPut("{id}")]
public void Put(int id, [FromBody]string value)
{
}
// DELETE api/values/5
[HttpDelete("{id}")]
public void Delete(int id)
{
}
}
Run Code Online (Sandbox Code Playgroud) c# asp.net-core-mvc asp.net-core asp.net-core-webapi asp.net-core-routing
我正在使用 ASP.NET Core 实现 REST API。除了使用 cookie 进行身份验证之外,它是无状态的,因此容易受到跨站点请求伪造 (CSRF) 攻击。
幸运的是,ASP.NET Core 提供了一种保护措施:防止ASP.NET Core 中的跨站点请求伪造 (XSRF/CSRF) 攻击。
由于我的应用程序没有任何视图或页面,我只是services.AddControllers()在我的Startup.
当点击归因于 的 REST 端点时[ValidateAntiForgeryToken],我收到以下异常:
System.InvalidOperationException: 没有注册“Microsoft.AspNetCore.Mvc.ViewFeatures.Filters.ValidateAntiforgeryTokenAuthorizationFilter”类型的服务。
使用注册我的控制器services.AddControllersWithViews()会使这个错误消失,因为它在内部注册了适当的服务。
根据文档:
当在 Startup.ConfigureServices 中调用以下 API 之一时,防伪中间件被添加到依赖注入容器中:
添加MVC
MapRazorPages
地图控制器路由
MapBlazorHub
所有这些方法在我看来都是以视图为中心的(除了MapControllerRoute我Configure在我的方法中做的Startup但它没有帮助),并且缺少服务的一部分命名空间是ViewFeatures. 这让我感到困惑,因为在我的理解中,尽管我正在开发一个没有视图的纯 Web API,但需要处理 CSRF。
我的理解有误吗?不涉及视图时如何配置CSRF保护?
我一直在开发一个使用 .NET 6.0 和 SQL 的项目,并且遇到了状态:400 标题:“发生一个或多个验证错误”。每当我尝试对治疗表发出 POST 请求时,都会出现错误,如下所示(使用 Swagger)。
400 - Undocumented
Error: response status is 400
Response body
Download
{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"traceId": "00-471d5fa9b5bd60df0f6dddef0dcd44ad-4ed5f5f29428b83e-00",
"errors": {
"TblPet": [
"The TblPet field is required."
],
"Procedure": [
"The Procedure field is required."
]
}
}
Response headers
content-type: application/problem+json; charset=utf-8
date: Thu,14 Jul 2022 11:25:42 GMT
server: Kestrel
Run Code Online (Sandbox Code Playgroud)
该项目遵循此 ERD:

该 API 是使用 Visual Studio 2022 构建的,它创建了许多public virtual项目,这些项目很可能是已设置的所有外键的结果。因此,我的 …
我有以下代码(从 Microsoft Learn 复制),在 Microsoft.Graph 4.54.0 上运行良好
var authProvider = new DelegateAuthenticationProvider(async (request) => {
// Use Microsoft.Identity.Client to retrieve token
var assertion = new UserAssertion(token.AccessToken);
var result = await clientApplication.AcquireTokenOnBehalfOf(scopes, assertion).ExecuteAsync();
request.Headers.Authorization =
new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", result.AccessToken);
});
Run Code Online (Sandbox Code Playgroud)
然后,我使用 Microsoft.Graph 5.0.0 和 Microsoft.Graph.Core 3.0.0 创建了一个新项目,这给出了无法找到 DelegateAuthenticationProvider 的错误。
如何创建可与 GraphServiceClient 一起使用的 AuthenticationProvider?
c# oauth-2.0 azure-ad-msal asp.net-core-webapi microsoft-graph-api
我正在使用ASP.NET Core Web API,我有多个独立的web api项目.在执行任何控制器的操作之前,我必须检查登录用户是否已经模仿其他用户(我可以从中获取DB)并且可以将模拟用户传递Id给actions.
由于这是一段可以重复使用的代码,我想我可以使用中间件:
public class GetImpersonatorMiddleware
{
private readonly RequestDelegate _next;
private IImpersonatorRepo _repo { get; set; }
public GetImpersonatorMiddleware(RequestDelegate next, IImpersonatorRepo imperRepo)
{
_next = next;
_repo = imperRepo;
}
public async Task Invoke(HttpContext context)
{
//get user id from identity Token
var userId = 1;
int impersonatedUserID = _repo.GetImpesonator(userId);
//how to pass the impersonatedUserID so it can be picked up from controllers
if (impersonatedUserID …Run Code Online (Sandbox Code Playgroud) c# middleware asp.net-core-mvc asp.net-core asp.net-core-webapi
我有两个项目:
如何IStringLocalizer在MyServices中添加本地化?.resx文件必须在哪里?
asp.net-core ×8
c# ×6
.net-core ×3
csrf ×1
dll ×1
jwt ×1
kubernetes ×1
middleware ×1
oauth ×1
oauth-2.0 ×1
sql ×1