我是 MVC 的新手。我搜索并没有找到适合我要求的解决方案。
我正在开发一个供我们团队内部使用的门户网站,它使用 Windows AD 身份验证进行登录。但是,对于基于角色的访问,我创建了一个本地数据库,该数据库可以返回用户的角色详细信息。我创建了一个自定义授权过滤器,允许我根据用户的角色处理授权。此过滤器从 DB 查询详细信息,但是这种方法的问题是,它会尝试从 DB 获取对控制器的每个请求的详细信息,这使得它变得昂贵。
如何将从数据库获取的用户详细信息保存在令牌中,这样我就不必为每个请求查询数据库并使用授权过滤器中的令牌值。此外,我可以使用从数据库中为用户检索的值,也可以在应用程序的任何其他位置使用。(我们在数据库中还有一些用户的其他详细信息)。
如果有人可以提出更好的方法来实现这一目标,请提供帮助。
这是我目前在授权过滤器中使用的代码:
public class AuthorizeRole : AuthorizeAttribute
{
private bool _authenticated;
private bool _authorized;
public string InRoles { get; set; }
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
base.HandleUnauthorizedRequest(filterContext);
if (_authenticated && !_authorized)
{
filterContext.Result = new RedirectResult("/account/error");
}
}
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
_authenticated = base.AuthorizeCore(httpContext);
if (_authenticated)
{
if (string.IsNullOrEmpty(InRoles))
{
_authorized = true;
return _authorized;
}
if (!string.IsNullOrEmpty(httpContext.User.Identity.Name))
{
string NTID = httpContext.User.Identity.Name.Split('\\')[1];
var …Run Code Online (Sandbox Code Playgroud) 我有一个简单的函数,有两个参数。我没有提到它们是位置性的,但当我检查该函数的帮助时,它会自动为它们分配一个位置。如何强制它们仅被命名为参数(不接受按位置的值)?
Function Test-Params
{
Param
(
[Parameter(Mandatory,ValueFromPipeline,ValueFromPipelineByPropertyName)]
$Param1,
[Parameter(ValueFromPipeline,ValueFromPipelineByPropertyName)]
$Param2
)
Write-Host "$Param1 $Param2"
}
Run Code Online (Sandbox Code Playgroud)
当我检查此函数的帮助或尝试通过提供参数位置值来运行该函数时,它可以工作(但它不应该工作):
Test-Params test1 test2
test1 test2
Run Code Online (Sandbox Code Playgroud)
帮助输出:
help Test-Params -Full
NAME
Test-Params
SYNTAX
Test-Params [-Param1] <Object> [[-Param2] <Object>] [<CommonParameters>]
PARAMETERS
-Param1 <Object>
Required? true
Position? 0
Accept pipeline input? true (ByValue, ByPropertyName)
Parameter set name (All)
Aliases None
Dynamic? false
-Param2 <Object>
Required? false
Position? 1
Accept pipeline input? true (ByValue, ByPropertyName)
Parameter set name (All)
Aliases None
Dynamic? false
Run Code Online (Sandbox Code Playgroud) 我浏览了很多关于这个问题的问题和答案,但没有一个答案谈论问题的根本原因以及如何永久解决它。
当我打开 Google Chrome 或 Edge 浏览器中任何选项卡的开发人员工具并检查“源”选项卡时,默认情况下它不显示源代码(对于 JavaScript/脚本)。但是,如果我在开发人员工具仍然打开的情况下刷新页面,它就会开始显示源代码。
我不知道在哪里以及如何修复此行为,早些时候,当我打开开发人员工具时,此功能可以正常工作,它用于在“源”选项卡下显示源代码,而无需刷新页面。
一些屏幕截图可以帮助更好地理解我的意思:
编辑:开发人员窗口中的当前设置以防万一有助于识别问题:
google-chrome developer-tools microsoft-edge google-developer-tools
我偶然发现了一个正则表达式,在尝试了几种不同的方法后无法修复它。
以下是带有示例输入的正则表达式的链接,下面是用于快速参考的正则表达式和示例文本:
正则表达式:
((XYZ|xyz|Xyz|Convent){1}(\s{0,})(INTERNATIONAL|International|international|INC|Inc|inc|LLC|Llc|llc|WORLDWIDE PTE\. LTD\.){0,})([\r\n]|[\t]|[ ]{2,})(?<CircuitID>[a-zA-Z0-9\-\/\ ]{6,26})\s*
Run Code Online (Sandbox Code Playgroud)
输入示例:
Circuits Affected:
Company Name Circuit ID Z End Billing ID ServiceType
XYZ INTERNATIONAL A1B101012 ABCD-XYZ-ABG089AB A000123456 UNI
XYZ INTERNATIONAL AB/PQRS/012345/ /ABC / PQRSTUVW ABCDEFGH CO ADDRESS CITY 1234 S RIDGELINE BLVD VA SOMECITY 12345 SOME BRANCH PKWY A0123456 N/A 0:00 CDT - 1:00 CDT
________________________________________
XYZ INTERNATIONAL AB/ABYX/271703/ /ABC / ABCDO47HBS ABCDEFG71 N/A N/A A0123456 N/A 0:00 CDT - 1:00 CDT
________________________________________
XYZ WORLDWIDE PTE. LTD. A1234597 N/A …Run Code Online (Sandbox Code Playgroud) 我提到了这个问题,它与我的问题类似,但无法完全解决问题,因为数据结构不同,而且我无法弄清楚如何将此解决方案应用于下面给出的示例数据:
{
"result": {
"RITM2572913": {
"number": "RITM2572913",
"state": "1",
"stage": "fulfillment",
"Sys_ID": "220e89681b31b384e3a0a79b2d4bcbf3",
"requested_for": "1d1673c4dbda5b0072a85099dc9619b0",
"Contoso_requested_for": "requested_for:1d1673c4dbda5b0072a85099dc9619b0,var_name_arr:",
"Contoso_sc_Purposeofthef5request": "Add",
"Contoso_Sc_Contactinfo": "Contact ",
"Contoso_sc_Appname": "Application ",
"Contoso_sc_Description": "Description",
"Contoso_special_instructions": "special_instructions:",
"business_justification": "Justification ",
"Contoso_business_justification": "busess_justification:Justification",
"Contoso_catalog_item_footer": "owner_info:"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我有这样的响应数据,需要对其进行反序列化以适应下面给出的对象模型:
public class RITMGETRequestResponse
{
public RITMDetails result { get; set; }
public class RITMDetails
{
public string business_justification { get; set; }
public string number { get; set; }
public string requested_for { get; set; }
public …Run Code Online (Sandbox Code Playgroud)