小编Jac*_*cob的帖子

将Json反序列化为Asp.Net Web API中的派生类型

我正在调用我的WebAPI的方法,发送一个我希望与模型匹配(或绑定)的json.

在控制器中我有一个方法,如:

public Result Post([ModelBinder(typeof(CustomModelBinder))]MyClass model);
Run Code Online (Sandbox Code Playgroud)

'MyClass',作为参数给出的是一个抽象类.我想这样,根据传递的json的类型,实例化正确的继承类.

为了实现它,我正在尝试实现自定义绑定器.问题是(我不知道它是否非常基本,但我找不到任何东西)我不知道如何检索请求中的原始Json(或更好的,某种序列化).

我知道了:

  • actionContext.Request.Content

但是所有方法都暴露为异步.我不知道这适合将生成模型传递给控制器​​方法...

非常感谢!

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

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

在iOS中的多个项目之间共享代码的最佳方式

我们计划在AppStore中推出一系列应用程序.它们将用于某种不同的期刊,显示通过XML从服务器下载的不同内容.所以这些应用程序将使用完全相同的代码(这是一个通用的应用程序,因此它可以在iPhone/iPad上运行).

我最初的想法是,为了上传应用程序,只需更改图像,徽标和配置(plist),使应用程序作为特定日志做出反应.压缩文件将上传到AppStore.

然而,这导致了一种可怕的方法,它会导致失败和错误.如果我忘记更改某些图像,因为您无法在编译文件中看到它们(因为它包含在内),它们将最终存储在商店中(我需要四到五天才能更改应用程序).

我正在努力寻找更好的方法,尽可能保持项目的独立性.我希望能够共享整个代码库:视图,类和笔尖,并为每个日志创建不同的项目.

哪个是实现这一目标的最佳方法?什么结构可以让我将逻辑(控制器,类)和UI分组并在不同的项目中使用它?

我希望我已经解释过了.

一如既往,非常感谢你.

xcode objective-c app-store ios

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

SelectListItem中的Selected属性永远不会起作用(DropDownListFor)

我在选择DropDownList的值时遇到问题.我一直在阅读所有类似的帖子,我无法得到解决方案.

实际的方法对我来说似乎非常好,因为我可以检查SelectList中的字段:

var selectList = new List<SelectListItem>(
    from variable in someKindOfCollection
    select new SelectListItem
        {
            Selected = variable.Property == selection,
            Text = variable.Property,
            Value = variable.Property
        });
Run Code Online (Sandbox Code Playgroud)

据说,这给了我完全的控制权.在构建了selectList之后,我可以使用调试器检查变量.一切都很好,其中一个标有"Selected"属性.

然后我使用DropDownListFor来显示视图:

@Html.DropDownListFor(
    g => g.SomePropertyInModel , selectList, new { @class = "cssClass" })
Run Code Online (Sandbox Code Playgroud)

但它没有用,从来没有..."渲染"下拉列表,但没有选择任何东西.

非常感谢 :)

新示例首先,我要道歉.我一直在隐藏信息,当然是完全无意的.所有代码都发生在Razor For循环中:

@foreach (var loopVariable in Model.Collection)
{
    if (Model.SomeCondition != null)
    {
        selection = someValue;
    }

    var selectList = new List<SelectListItem>(
      from variable in someKindOfCollection
      select new SelectListItem
    {
        Selected = variable.Property == selection,
        Text …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc asp.net-mvc-3

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

使用SaveChanges和ExecuteStoreCommand进行事务操作

我有一个问题,我想分享.上下文有点乱,所以我会尽力在解释中.

我需要在许多实体上创建一个事务操作.我正在使用EF CodeFirst但使用遗留数据库,我无法更改.为了创建比数据库提供的更一致的模型,我将数据库信息投射到我自己创建的更精细的实体中.

由于我需要使用不同的上下文,我最初的想法是使用TransactionScope,它在过去给了我很好的结果.为什么我需要不同的背景?由于db的各种问题,我无法仅在一个操作(UnitOfWork)中进行更新.我需要检索仅在SaveChanges()之后出现的不同ID.

using (var scope = new TransactionScope())
{
    Operation1();
    Operation2();
    Operation3(uses ExecuteStoreCommand)
    SaveChanges();

    Operation4();
    SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

我知道,为了使用TransactionScope,我需要在所有操作之间共享相同的连接(我正在这样做,将上下文传递给对象).但是,当我执行其中一个操作(使用ExecuteStoreCommand)或我尝试在第一个SaveChanges之后进行一些更新时,我总是收到MSDTC错误(对分布式事务的支持被禁用),甚至更罕见,作为卸载域.

我不知道是否有人可以帮助我,至少知道这是这个场景的最佳方向.

非常感谢,

ef-code-first c#-4.0 entity-framework-4.1

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

我应该如何测试 ES2015 类?

我的经验是使用静态类型语言,我必须承认,在尝试使用动态语言实现相同目标时,我感到迷茫。我想避免的一件事是应用在这种情况下没有意义的概念。请假设这个类属于我的项目,并且我们想用 Jasmine 测试它:

class MyEs6Class {
    constructor(
        collaborator1 = new MyCollaborator(),
        factory = new MyFactory()) {

        this.collaborator1 = collaborator1;
        this.factory = factory;
    }

    method() {
        // Code
    }
}
Run Code Online (Sandbox Code Playgroud)

我在构造函数中提供对象的默认实例,因为这允许我在测试时模拟它们。我正在尝试以与使用相同的方式使用控制反转,比如说 C#,但是使用语言的动态特性来避免依赖注入容器。这两个依赖是类所需要的,所以从结构上看,我觉得很明确,必须使用构造函数来提供。

另外,我使用工厂的概念只是因为当类处于“活动状态”时可能会多次需要工厂中的新对象。

从 ES6 类的角度来看,我知道私有和公共之间没有区别(/sf/answers/1949754971/),所以我可以在私有方法中让工厂处理逻辑,但依靠他的测试似乎是错误的。另一方面,仅仅因为我需要伪造返回的对象而拥有称为 factory 的东西似乎很奇怪,也许是在尖叫我缺乏知识。

  • 在这种情况下模拟合作者的正确方法是什么?
  • 仅仅因为我需要模拟返回的对象而拥有工厂的概念是否很愚蠢?
  • 在 Javascript/ES6 中隔离被测对象的一种可维护且优雅的方式是什么?我可以研究任何有趣的公共代码库?

javascript jasmine ecmascript-6

5
推荐指数
0
解决办法
206
查看次数

对象db不是包播放的成员

我正在尝试使用Scala和Play框架进行我的第一次测试.

我已经使用独立包安装了play 2.2.0,这似乎是最后一个版本.之后,我已经能够创建一个新的应用程序,编译并运行它.

我试图开始使用Anorm包来访问数据库,但是我发现了一个我在文档上找不到的阻塞错误.我不知道这是否意味着如此明显,但在添加之后:

package controllers

import play.api._
import play.api.mvc._
import play.db.anorm._ //(this is the new line)

object Application extends Controller {
  def index = Action {
    Ok(views.html.index("Your new application is ready."))
  }
}
Run Code Online (Sandbox Code Playgroud)

它失败了:

对象db不是包播放的成员

我见过这个:

他们谈论将依赖项添加到jdbc,这似乎已经在我的build.sbt中.

libraryDependencies ++= Seq(
  jdbc,
  anorm,
  cache
)   
Run Code Online (Sandbox Code Playgroud)

我也在这里找到了这个帖子:

但我在我的项目中找不到build.scala文件.现在不使用任何IDE,只需播放控制台(运行和编译命令).

非常感谢!

scala playframework playframework-2.0

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

尝试在Play中安装SecureSocial时未解决的依赖关系

使用Scala和Play的第一步.我正在尝试安装SecureSocial插件,但我不能.我对解决方案本身感兴趣,任何事情(答案或资源)都可以提高我对工具的了解.

在Scala网页(http://securesocial.ws/guide/installation.html)中,说明如下:

这是第一个问题.我没有Build.scala.无论如何,我有一个/project/plugins.sbt具有非常相似的结构.

即使使用不同的格式,我也可以添加以下内容:

当我尝试编译时,会出现一个巨大的异常堆栈.基本上:

  • sbt.ResolveException:未解析的依赖项:securesocial #securesocial; 2.1.2:未找到

似乎在尝试:

如果我查看http://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/,我看不到任何类似于之前写的路径.例如,您可以看到放置文档和源的位置,但是以JAR格式,而不是pom:

我完全错了吗?

谢谢!

scala playframework-2.0 securesocial

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

使用Java未来进行无限操作是错误的吗?

我需要在Clojure程序中实现无限操作.我希望Java程序员的语法也相当清晰:

(defn- my-operation
    (future
        (while @continue
            (do things)
            (Thread/sleep polling-time)))
Run Code Online (Sandbox Code Playgroud)

这给了我我想要的东西,在不同的线程中的操作,因此它不会阻止主要的,并且还有一个非常清晰和直接的语法,而不必处理将迫使我使用点特殊形式的本机Java函数.

但Java未来的定义是"异步计算结果的表示",在这种情况下,我实际上并没有对结果做任何事情.

  • 以这种方式使用它们是错误的吗?
  • 与启动我自己的Thread相比,是否有任何技术差异应该让我担心?
  • 这在语义上是错误的吗?

java multithreading future clojure java.util.concurrent

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

环防伪中间件是否可以有条件应用?

我们有一个使用 HttpKit 来服务请求的 Web 应用程序和一个用 Ring 中间件包装的处理程序。

该处理程序类似于:

(def handler
  (->  #'req-handler
    (wrap-defaults site-defaults)
    (wrap-content-type-and-encoding)
    (wrap-cookies)
    (wrap-stacktrace)))
Run Code Online (Sandbox Code Playgroud)

在站点默认设置中可以找到:

 :security  { ...
              :anti-forgery         anti-forgery-setting
              ... }
Run Code Online (Sandbox Code Playgroud)

该应用程序过去仅服务来自浏览器的请求,但现在某些端点响应 API 请求,包括 POST 操作。

在文档中我可以读到:

如果没有有效的防伪令牌,此中间件将阻止除 GET 和 HEAD 之外的所有 HTTP 方法访问您的处理程序。

因此,您应该只将此中间件应用于应用程序中设计为通过 Web 浏览器访问的部分。此中间件不应应用于定义 Web 服务的处理程序。

有没有办法有条件地应用防伪设置,或者site-defaults根据请求提供不同的版本?

clojure ring http-kit

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

解析JSON和选项[Any]

如果这个问题太简单,我很抱歉,我刚开始使用Scala.

我试图在Scala中解析一些JSON,我在理解下面发生的事情时遇到了一些麻烦:

scala> import scala.util.parsing.json.JSON
scala> val x = JSON.parseFull("""{"name": "x",  "lang": "en"} """)

x: Option[Any] = Some(Map(name -> x, lang -> en))
Run Code Online (Sandbox Code Playgroud)

现在,因为parseFull返回一个Option [Any],并且我知道它确实包含一个值,我可以写:

scala> x.get
res6: Any = Map(name -> x, lang -> en)
Run Code Online (Sandbox Code Playgroud)

我如何处理这个任何结果?我想要的是直接访问键或值,执行类似于x.get("name")的操作.

非常感谢!

scala

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

使用 Rack::Attack 防止快速登录尝试

我们一直在阅读基于表单的网站身份验证权威指南,目的是防止快速登录尝试。

这方面的一个例子可能是:

  • 1 次尝试失败 = 无延迟
  • 2 次失败尝试 = 2 秒延迟
  • 3 次失败尝试 = 4 秒延迟
  • 等等

指南中出现了其他方法,但它们都需要一个能够记录以前失败尝试的存储空间。

作为可能的解决方案,在本期的其中一篇文章中讨论了阻止列表(以旧名称 blacklisting 在文档中更改为阻止列表)。

根据 Rack::Attack 具体而言,一个简单的实现示例可能是:

登录失败的地方:

StorageMechanism.increment("bad-login/#{req.ip")
Run Code Online (Sandbox Code Playgroud)

在 rack-attack.rb 中:

Rack::Attack.blacklist('bad-logins') { |req|
    StorageMechanism.get("bad-login/#{req.ip}")
}
Run Code Online (Sandbox Code Playgroud)

这里有两个部分,如果它被列入阻止,则返回响应并检查之前是否发生了失败的尝试(StorageMechanism)。

第一部分,返回响应,可以由 gem 自动处理。但是,我没有看到第二部分那么清楚,至少对于 gem 和 Rails 世界的缓存后端的事实上的选择,Redis。

据我所知,Redis 中过期的键会被自动删除。这将使得无法访问信息(即使已过期),为计数器设置一个新值并相应地增加不应期的超时。

有没有办法用 Redis 和 Rack::Attack 来实现这一点?

我在想,在这种情况下,“存储机制”可能必须保持绝对不可知,并且对 Rack::Attack 及其存储选择一无所知。

ruby security rack ruby-on-rails rackattack

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

避免从AngularJS控制器泄漏私有函数

我最近看到过这样的情况:

app.controller('MainCtrl', ['$scope', 'MyService', function($scope, MyService) { 
    $scope.name = 'World';
    var self = this;

    $scope.operationOne = function() {         
        MyService.sayHello(); 
        self.someCommonBehaviour(); 
    }

    $scope.operationTwo = function() {     
        MyService.sayGoodbye(); 
        self.someCommonBehaviour(); 
    }

    this.someCommonBehaviour = function() {
    }
}]);
Run Code Online (Sandbox Code Playgroud)

附加到作用域的函数之间存在一些通用功能.由于我们需要对控制器的引用来访问'someCommonBehaviour',我们将函数附加到'this'并在self中存储它的引用,因此我们可以在$ scope函数中访问它(这在范围内是有效的范围)当函数被调用时).

可以从外部访问"someCommonBehaviour"的功能(ctrl.someCommonBehaviour()).我认为,至少在我看到的情况下,意图显然是将这些功能作为控制器的私人关注点.可以访问它们的事实是一个意外.

此外,我已经看到程序员试图在已经很复杂的控制器中添加更多逻辑的情况,并且他们陷入了测试这些功能的诱惑,这是你不应该做的事情.

我正在寻找一种方法来阻止从外部访问这些功能.

我正在考虑IIFE,因为它们允许您控制将定义模块的公共API的函数(这是我为服务选择的实现).我为这种情况所需的唯一API是由我添加到作用域的函数定义的,这感觉很奇怪.所以,你会有类似的东西:

(function(module) {
    var controller = function($scope, MyService) {
        $scope.methodOne = function(
        ...
        ...
        return { }
    };
    module.controller('controller', ['$scope','MyService',controller]);
})(angular.module('app');
Run Code Online (Sandbox Code Playgroud)

我认为它应该可行,但返回一个空物体感觉很奇怪.

我错过了什么吗?什么是最好的方法?

javascript angularjs

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