小编oli*_*lif的帖子

在自定义授权MVC4 Web Api中访问post或get参数

是否可以通过HttpActionContext对象访问post或get参数?

我有一组传感器可以将数据记录到提供REST API的Web服务器上.我想通过让传感器在数据中包含其硬件ID然后在数据库中查找以查看id是否存在来介绍某种身份验证/授权.由于API提供了许多web api操作方法,我最好使用自定义授权属性

public class ApiAuthorizationFilter : AuthorizeAttribute
{
    protected override bool IsAuthorized(HttpActionContext actionContext)
    {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

如何从actionContext访问post/get数据?

编辑:POST的示例

POST /Api/api/ActionMethod/ HTTP/1.1\r\n
Content-Type: application/json\r\n
Host: localhost\r\n
Accept: */*\r\n
Content-Length:52\r\n
\r\n
{"Id": '121a222bc', "Time": '2012-02-02 12:00:00'}\r\n
Run Code Online (Sandbox Code Playgroud)

祝你今天愉快!

.net authorization asp.net-mvc-4 asp.net-web-api

57
推荐指数
2
解决办法
6万
查看次数

.net中基于资源的授权

假设你有一个带有GetResource(int resourceId)动作的.net web api.此操作(具有指定的id)应仅授权与该id相关联的用户(该资源可以是例如用户编写的博客帖子).

这可以通过多种方式解决,但下面给出一个例子.

    public Resource GetResource(int id)
    {
        string name = Thread.CurrentPrincipal.Identity.Name;
        var user = userRepository.SingleOrDefault(x => x.UserName == name);
        var resource = resourceRepository.Find(id);

        if (resource.UserId != user.UserId)
        {
            throw new HttpResponseException(HttpStatusCode.Unauthorized);
        }

        return resource;
    }
Run Code Online (Sandbox Code Playgroud)

用户已通过某种机制进行身份验证的位置.

现在,假设我还希望授权用户(例如,管理员类型)使用端点(具有相同的ID).此用户与资源没有任何直接关系,但由于其类型(或角色)而具有授权.这可以通过检查用户是否为管理员类型并返回资源来解决.

有没有办法集中这种方式,以便我不必在每个动作中编写授权代码?

编辑 根据答案,我想我必须澄清我的问题.

我真正追求的是一些机制,可以使基于资源的授权成为可能,但同时允许一些用户也使用相同的端点和相同的资源.以下操作将解决此特定端点和此特定角色(管理员)的问题.

    public Resource GetResource(int id)
    {
        string name = Thread.CurrentPrincipal.Identity.Name;
        var user = userRepository.SingleOrDefault(x => x.UserName == name);
        var resource = resourceRepository.Find(id);

        if (!user.Roles.Any(x => x.RoleName == "Admin" || resource.UserId != user.UserId)
        {
            throw new HttpResponseException(HttpStatusCode.Unauthorized);
        } …
Run Code Online (Sandbox Code Playgroud)

.net asp.net-mvc authorization asp.net-web-api

12
推荐指数
1
解决办法
4628
查看次数

使用log4net作为参数记录loglevel

有没有办法使用log4net登录并使用LogLevel作为参数?

也就是说,而不是写作

Log.Debug("Something went wrong");
Run Code Online (Sandbox Code Playgroud)

我想写这样的东西:

Log("Something went wrong", LogLevel.Debug);
Run Code Online (Sandbox Code Playgroud)

c# log4net

8
推荐指数
2
解决办法
3790
查看次数

记录log4net数字级别值

我想在使用log4net时记录对应于日志级别的数值.也就是说,现在我使用以下命令文本登录数据库:

<commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />

   <parameter>
    <parameterName value="@log_level" />
    <dbType value="String" />
    <size value="50" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%level" />
    </layout>
  </parameter>
Run Code Online (Sandbox Code Playgroud)

我想将日志记录级别的字符串值更改为数字.这可能吗?

log4net

2
推荐指数
1
解决办法
598
查看次数

DDD - 限界上下文和部署单元

我刚刚阅读了 Vaughn Vernon 的书实现领域驱动设计,我对有界上下文如何与应用程序保持一致感到有些困惑。

一个应用程序中可以有多个有界上下文吗?如果是这样,是什么决定一个上下文应该与另一个上下文一起部署还是应该作为独立单元部署?

如果我在一个应用程序(部署单元)中有多个有界上下文,并且客户端(例如 UI)同时需要来自多个上下文的信息,那么我是否应该创建一个新的应用程序服务来支持这种场景?

domain-driven-design

1
推荐指数
1
解决办法
486
查看次数

.Net web api,SSL + basic auth

我有多组传感器网络将数据发送到.net web api.不知何故,我需要保护API的一些端点(以便我可以确定发送到API的信息确实来自传感器).基本身份验证和SSL似乎是一种方法.问题是我无法理解SSL部分.

截至目前,我已经创建了存储在传感器上的客户端证书,可以通过Request.GetClientCertificate()方法在API中检索证书的信息.当我只是想用基本的身份验证来保护我的Api时,这是否有点过分?也就是说,只需通过https发送数据而不提供证书,通信是否安全?

我不需要使用证书进行身份验证(因为这是通过基本身份验证完成的).

ssl basic-authentication asp.net-web-api

0
推荐指数
1
解决办法
417
查看次数