小编Rez*_*adi的帖子

操作过滤器中的Web Api请求内容为空

我有一个名为Log的属性,它尝试将请求和响应的内容记录到文本文件中.我把它放在我的控制器上以涵盖所有动作.在LogAttribute中,我正在将内容读取为字符串(ReadAsStringAsync),因此我不会丢失请求正文.

public class LogAttribute : ActionFilterAttribute
{
    // ..
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        // stuff goes here
        var content = actionContext.Request.Content.ReadAsStringAsync().Result; 
        // content is always empty because request body is cleared
    }

    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
    {
        // other stuff goes here
        var content = actionContext.Request.Content.ReadAsStringAsync().Result;
        // content is always empty because request body is cleared
    }

    // ..
}
Run Code Online (Sandbox Code Playgroud)

另一方面,我在我的动作参数类之前放置了FromBody属性以利用它的好处.

[Log]
public class SomethingController
{
    public HttpResponseMessage Foo([FromBody] myModel)
    {
        // something
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是ActionExecuting或ActionExecuted中的内容始终为空.

我认为这是因为FromBody在我的Log属性之前运行,而不像它们在代码中的顺序.我再次认为是因为根据动作参数(路径处理)找到了请求的最佳动作/控制器匹配.之后我的请求正文被清除,因为请求正文在WebApi中是非缓冲的. …

c# asp.net asp.net-mvc asp.net-web-api

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

如何在C#中收听windows事件?

我正在开发一个与歌词相关的应用程序,我需要收听Windows Media Player Events.我在"可访问事件监视器"中观看了窗口事件,我发现WMP在状态或当前位置发生变化时会发送一些事件.我在MSDN上搜索并发现了这篇文章a如何在Visual C#.NET中设置Windows挂钩但我无法使其工作.

如何从我的C#应用​​程序中听取该事件或使用其他方法获取当前歌曲和WMP播放状态的任何建议?

谢谢

c# winapi wmp com-interop

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

正则表达式:如何在重复捕获组中捕获所有迭代

我希望这些 C# 行:

var regex = new Regex("A(bC*)*");
var match = regex.Match("AbCCbbCbCCCCbbb");
var groups = match.Groups;
Run Code Online (Sandbox Code Playgroud)

返回类似的东西:

["AbCCbbCbCCCCbbb", "A", "bCC", "b", "bC", "bCCC", "b", "b", "b"]
Run Code Online (Sandbox Code Playgroud)

但它只返回最后捕获的匹配项:

["AbCCbbCbCCCCbbb", "b"]
Run Code Online (Sandbox Code Playgroud)

此处Regex101 还显示以下内容作为警告:

重复捕获组只会捕获最后一次迭代。在重复组周围放置一个捕获组以捕获所有迭代,或者如果您对数据不感兴趣,则使用非捕获组代替

我应该如何更改我的正则表达式模式?

.net c# regex capturing-group

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