小编Sto*_*mov的帖子

操作过滤器中的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万
查看次数

ZF2:在控制器中获取url参数

我已经体验过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)

php zend-framework-mvc zend-framework2

25
推荐指数
4
解决办法
6万
查看次数

如何获取已读取的内容

我有一个继承自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的调用者所做的事情,因为这是第三方组件.我该怎么办?

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

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

Zend Framework 2项目示例

有人可以给我一个Zend Framework 2项目示例,
或任何有关如何使用zend_tool进行ZF2的信息.

谢谢

php zend-tool zend-framework2

17
推荐指数
3
解决办法
3万
查看次数

在zend框架中获取用户IP地址

如何在Zend-framework 2中获取客户端的IP地址?在普通的PHP中它是$ _SERVER ['REMOTE_ADDR'],但也许是智能的Zend函数?

有任何想法吗?

php zend-framework2

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

如何在尚不支持iframe的浏览器中处理iframe的'allow-modals'沙箱标志?

从Chrome 46开始,需要在iframe的沙箱属性中添加"allow-modals"标志,以允许模式(如alert和confirm)突破iframe.到目前为止没问题.

但是当您在尚未支持该标志的浏览器中运行该代码时(如版本46之前的Safari或Chrome),您会收到以下错误: 解析'sandbox'属性时出错:'allow-modals'是无效的沙盒标志.

有人知道如何在没有某种浏览器嗅探的情况下解决这个问题吗?

iframe sandbox allow-modals

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

Zend Framework 2自动加载

我刚刚开始研究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用于什么.如果有人能够对此有所了解,那将非常感激!

php zend-autoloader zend-framework2

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

ZF2:如何为生产,升级等实现不同的配置?

在我从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模块中做到这一点.谢谢!

php config zend-framework2

11
推荐指数
2
解决办法
3748
查看次数

zendframework 2 inputfilter自定义默认错误消息

我试图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)

我做错了什么?

参考

zend-framework2

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

Zend Framework 2中的OAuth

我目前正在开发基于新版本2.0.2的第一个ZF应用程序.(我对ZF1没有任何经验)

现在我需要使用OAuth进行身份验证,我想知道是否已经有ZF2的实现.我知道有一个ZF1模块.

如果没有,你会推荐什么?使用PHP的原生OAuth支持?

谢谢你的帮助!罗伯托

php zend-framework-modules zend-framework2

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