我有一个名为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中是非缓冲的. …
我正在开发一个与歌词相关的应用程序,我需要收听Windows Media Player Events.我在"可访问事件监视器"中观看了窗口事件,我发现WMP在状态或当前位置发生变化时会发送一些事件.我在MSDN上搜索并发现了这篇文章a如何在Visual C#.NET中设置Windows挂钩但我无法使其工作.
如何从我的C#应用程序中听取该事件或使用其他方法获取当前歌曲和WMP播放状态的任何建议?
谢谢
我希望这些 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 还显示以下内容作为警告:
重复捕获组只会捕获最后一次迭代。在重复组周围放置一个捕获组以捕获所有迭代,或者如果您对数据不感兴趣,则使用非捕获组代替
我应该如何更改我的正则表达式模式?