我有一个名为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中是非缓冲的. …
我已经体验过Zend Framework 1,并且我已经使用该框架构建了一些应用程序.
现在,我正在试验Zend Framework 2,但我坚持使用url参数.我设置了这样的路由:
// Setup for router and routes
'Zend\Mvc\Router\RouteStack' => array(
'parameters' => array(
'routes' => array(
'default' => array(
'type' => 'Zend\Mvc\Router\Http\Segment',
'options' => array(
'route' => '/[:slug]',
'constraints' => array(
'slug' => '[a-zA-Z][a-zA-Z0-9_\/-]*'
),
'defaults' => array(
'controller' => 'Htmlsite\Controller\BootController',
'action' => 'index',
'slug' => 'home'
),
),
),
'home' => array(
'type' => 'Zend\Mvc\Router\Http\Literal',
'options' => array(
'route' => '/',
'defaults' => array(
'controller' => 'Htmlsite\Controller\BootController',
'action' => 'index',
),
),
),
), …
Run Code Online (Sandbox Code Playgroud) 我有一个继承自ApiController的类.它有一个像这样的Put方法:
[PUT("user/{UserId}")]
public HttpResponseMessage Put(string userId, PaymentRequest paymentRequest)
{
// Calling business logic and so forth here
// Return proper HttpResponseMessage here
}
Run Code Online (Sandbox Code Playgroud)
该方法在上面工作正常.现在我需要验证方法调用的签名,但在这里我遇到了一个问题.签名本质上是方法+ url + body的组合.我可以通过调用Request.Method和我可以通过调用Request.RequestUri.ToString()得到的url获得的方法,但是我无法得到它之前的身体,因为它被自动反序列化为PaymentRequest对象之前 asp.net MVC4框架.
我的第一次尝试: 因为我现在已经理解了Request.Content.ReadAsStringAsync().结果什么也没有返回.这是因为内容只能读取一次.
我的第二次尝试: 我尝试将其序列化为JSON字符串.
var serializer = new JavaScriptSerializer();
var paymentRequestAsJson = serializer.Serialize(paymentRequest);
Run Code Online (Sandbox Code Playgroud)
这个问题是格式化与签名的正文部分略有不同.它具有相同的数据,但有一些空格.
我无法改变Put-method的调用者所做的事情,因为这是第三方组件.我该怎么办?
有人可以给我一个Zend Framework 2项目示例,
或任何有关如何使用zend_tool进行ZF2的信息.
谢谢
如何在Zend-framework 2中获取客户端的IP地址?在普通的PHP中它是$ _SERVER ['REMOTE_ADDR'],但也许是智能的Zend函数?
有任何想法吗?
从Chrome 46开始,需要在iframe的沙箱属性中添加"allow-modals"标志,以允许模式(如alert和confirm)突破iframe.到目前为止没问题.
但是当您在尚未支持该标志的浏览器中运行该代码时(如版本46之前的Safari或Chrome),您会收到以下错误: 解析'sandbox'属性时出错:'allow-modals'是无效的沙盒标志.
有人知道如何在没有某种浏览器嗅探的情况下解决这个问题吗?
我刚刚开始研究Zend Framework 2(并且是ZF的新手),在用户指南中,他们在添加新模块时使用自动加载.但是,我觉得对于一个新秀来说这个解释非常具有挑战性.他们Module.php
在模块目录中添加一个文件,其中包含以下代码:
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\ClassMapAutoloader' => array(
__DIR__ . '/autoload_classmap.php',
),
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
),
),
);
}
Run Code Online (Sandbox Code Playgroud)
现在我做了一些挖掘,试图找出这个自动加载的全部内容.据我所知,自动加载使用spl_autoload_register()
并且是一种避免require_once()
在代码中无处不在的方法.因此,当尝试使用未定义的类时,autoload()
将运行已注册的方法,该方法仅执行数组查找,并且如果已添加,则包括如下所示的文件.
// Zend/Loader/ClassMapAutoloader.php
public function autoload($class)
{
if (isset($this->map[$class])) {
require_once $this->map[$class];
}
}
Run Code Online (Sandbox Code Playgroud)
由于性能,这似乎很聪明.我希望我刚才写的是正确的.基于此,我试图getAutoloaderConfig()
从第一个代码片段中弄清楚发生了什么,但我很困惑.看起来好像使用了这个方法返回的数组AutoloaderFactory::factory()
,但我不确定是出于什么目的.使用选项实例化自动加载器,但确实如此,我不确定.我想数组的第二个条目指定在哪里找到模块命名空间的源文件 - 至少这是我的猜测.然而,我第一个条目并不确定.在用户指南中,它说明如下:
在开发过程中,我们不需要通过类图加载文件,因此我们为类图自动加载器提供了一个空数组.
该文件只返回一个空数组.我不确定这个ClassMapAutoloader的目的是什么.
对不起,如果我的观点不清楚; 基本上我试图弄清楚发生了什么getAutoloaderConfig()
以及mymodule/autoload_classmap.php
用于什么.如果有人能够对此有所了解,那将非常感激!
在我从github下载的sceleton应用程序中有一个文件模块/ Application/config/module.config.php
return array(
'layout' => 'layout/layout.phtml',
'display_exceptions' => true,
'di' => array(
'instance' => array(
'alias' => array(....
Run Code Online (Sandbox Code Playgroud)
此文件用于module/Application/module.php:
public function getConfig()
{
return include __DIR__ . '/config/module.config.php';
}
Run Code Online (Sandbox Code Playgroud)
如何根据域(生产,分期,开发)创建3种不同的配置?似乎在ZF1中使用了env vars,但我不知道如何在zf2模块中做到这一点.谢谢!
我试图Value is required and can't be empty
在zf2中自定义默认错误消息" "
我使用以下代码在inputfilter的验证器中添加自定义默认错误消息
$inputFilter->add($factory->createInput(array(
'name' => 'username',
'required' => true,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 4,
'max' => 20,
'messages' => array(
'isEmpty' => 'Please enter User Name between 4 to 20 character!'
),
),
),
),
)));
Run Code Online (Sandbox Code Playgroud)
但我得到了以下错误.
Zend\Validator\Exception\InvalidArgumentException
File:
/home/website/vendor/zendframework/zendframework/library/Zend/Validator/AbstractValidator.php:220
Message:
No message template exists for key 'isEmpty'
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
我目前正在开发基于新版本2.0.2的第一个ZF应用程序.(我对ZF1没有任何经验)
现在我需要使用OAuth进行身份验证,我想知道是否已经有ZF2的实现.我知道有一个ZF1模块.
如果没有,你会推荐什么?使用PHP的原生OAuth支持?
谢谢你的帮助!罗伯托
php ×6
asp.net ×2
c# ×2
allow-modals ×1
asp.net-mvc ×1
config ×1
iframe ×1
sandbox ×1
zend-tool ×1