小编Chr*_*int的帖子

根据请求从MVC web api返回xml或json

鉴于以下webapiconfig;

config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
Run Code Online (Sandbox Code Playgroud)

和这个控制器;

  public class ProductsController : ApiController
    {
         Product[] _products = new Product[] 
        { 
            new Product { Id = 1, Name = "Tomato Soup", Category = "Groceries", Price = 1 }, 
            new Product { Id = 2, Name = "Yo-yo", Category = "Toys", Price = 3.75M }, 
            new Product { Id = 3, Name = "Hammer", Category = "Hardware", Price = 16.99M } 
        };

        public IEnumerable<Product> GetAllProducts() …
Run Code Online (Sandbox Code Playgroud)

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

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

统一解析同一类型的多个实例

我想做一个简单的多种类型注册解决方案(最终注入构造函数,但使用.Resolve来查看Unity是否能够执行此类操作.

在下面的每种情况下,Unity都会解析0应该解决的项目2.

是否有一些团结的转变可以打开2007年后的行为?还是我只是大失所想?

这是我的代码:

public interface IFoo {}
public class Foo1 : IFoo{}
public class Foo2 : IFoo{}

class Program
{
    static void Main(string[] args)
    {
        var container = new UnityContainer();
        container.RegisterType<IFoo, Foo1>();
        container.RegisterType<IFoo, Foo2>();

        // container.Resolve<IEnumerable<IFoo>>();   returns 0
        // container.ResolveAll<IFoo>(); returns 0

        var foos = container.Resolve<IFoo[]>();
        Console.WriteLine(foos.Count());

        Console.ReadLine();

    }
}
Run Code Online (Sandbox Code Playgroud)

c# ioc-container unity-container

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

删除<ArrayOf.来自MVC Web Api的回复

我从标准的MVC 4 WebApi项目获得以下响应;

<ArrayOfProduct xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Product>
<Id>1</Id>
<Name>Tomato Soup</Name>
<Category>Groceries</Category>
<Price>1</Price>
</Product>
</ArrayOfProduct>
Run Code Online (Sandbox Code Playgroud)

我试图让它返回

<Products>
<Product>
<Id>1</Id>
<Name>Tomato Soup</Name>
<Category>Groceries</Category>
<Price>1</Price>
</Product>
</Products>
Run Code Online (Sandbox Code Playgroud)

我发现许多参考各种方法可以解决这个问题,没有工作;

更改默认序列化程序不起作用.

创建客户序列化程序Product不起作用.

创建List<Product>使用适当的XmlRoot和XmlElement属性公开的新类不起作用.

添加Datacontract属性不起作用.

添加CollectionDatacontract属性不起作用.

这对其他人来说似乎很简单,除了我!

xml asp.net-mvc asp.net-mvc-4 asp.net-web-api

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

TFS构建失败.对源代码管理中的文件的未解析引用

我有一个在本地工作正常的构建,但是,不会在我们的TFS环境中构建.

我收到以下错误;

C:\ Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.Common.targets(1578):无法解析此引用.无法找到程序集"Assembly.Services.Common".检查以确保磁盘上存在程序集.如果您的代码需要此引用,则可能会出现编译错误.

有问题的组件被检入TFS并位于以下位置;

/Root/BaseBinRefs/Assembly.Services.Common.dll

它在.net框架之外没有任何外部引用.

未能构建的项目位于TFS中的以下位置

/根/服务/ AssemblySolutionFolder/AssemblyThatIsFailing

在解决方案中的项目中引用程序集,并且程序集的HintPath看起来是正确的;

   <Reference Include="Assembly.Services.Common, Version=1.0.0.0, 
      Culture=neutral, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\..\..\BaseBinRefs\Assembly.Services.Common.dll</HintPath>
    </Reference>
Run Code Online (Sandbox Code Playgroud)

如上所述,它在本地构建,我没有理由认为它应该在TFS内失败.需要注意的是,我对TFS一般是新手,并且仍然试图将我们的第一个项目集成到这个环境中.

更新1

使用ProcessMonitor,我看到TFS尝试从中加载文件;

C:\构建\ 1\ROOT\BaseBinRefs\Assembly.Services.Common.dll

哪个不存在,但在相对意义上是正确的.现在,当我查看Sources目录时,我看到包含Assembly.Services.Common.dll的BaseBinRefs,所以它已经下载了它们(我将BaseBinRefs添加到构建定义中)

c# tfs build visual-studio-2010

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

存储和更新外部API密码的最佳实践

我有一个ASP.Net C#应用程序,需要每5分钟使用WebServices连接到一个外部API.

外部Web服务的要求如下:

  • 用户名和密码是必需的
  • 我必须在每个webservice请求中传输用户名和密码
  • 密码每90天到期,必须在到期日之前更改
  • 密码无法手动更改(由人工),我的应用程序必须连接到单独的密码更改Web服务才能更改密码.
  • 我的应用程序必须根据一组规则生成每个新密码.
  • 密码永远不会被重用.
  • 需要SSL,证书和防火墙IP限制

我已经建立了以前的所有,但我目前有一个问题.存储当前和历史密码的最佳做法是什么?

显然,存储明文密码是一个糟糕的解决方案.我需要能够让我的web服务读取密码并随每个请求一起传输.我还需要能够访问所有历史密码,以确保我新生成的密码不重复.

理想情况下,我想将每个(加密的)密码存储在我的数据库中,并在需要调用Web服务时对其进行解密.我应该遵循最佳做法吗?我应该使用Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.Cryptographer.EncryptSymmetric(..)加密每个密码吗?

注意:不幸的是,我无权更改外部API的功能.我必须遵守所提供的规则.

c# asp.net passwords web-services password-encryption

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

具有多个/未知标准的动态linq查询

我希望实现一个系统,用于"构建"条件,然后从数据库返回结果数据.目前,有一个存储过程可以动态生成SQL并执行它.这是我想要删除的特殊问题.

我的问题来自这样一个事实:我可以在我的标准中包含多个字段,并且对于每个字段,可能有一个或多个值,具有不同的潜在运算符.

例如,

from t in Contacts 
where t.Email == "email@domain.com" || t.Email.Contains ("mydomain")
where t.Field1 == "valuewewant"
where t.Field2 != "valuewedontwant"
select t
Run Code Online (Sandbox Code Playgroud)

字段,标准和运算符存储在数据库(和List<FieldCriteria>)中,并且可能是这样的(基于上面);

Email, Equals, "email@domain.com"
Email, Contains, "mydomain" Field1,
Equals, "valuewewant" Field2,
DoesNotEqual, "valuewedontwant"
Run Code Online (Sandbox Code Playgroud)

要么

new FieldCriteria
{
FieldName = "Email",
Operator = 1, 
Value = "email@mydomain.com"
}
Run Code Online (Sandbox Code Playgroud)

因此,使用我拥有的信息,我希望能够构建具有任意数量条件的查询.我之前看到过Dynamic Linq和PredicateBuilder的链接,但我无法将其视为我自己问题的解决方案.

任何建议,将不胜感激.

更新

继关于Dynamic Linq的建议之后,我提出了一个非常基本的解决方案,使用单个运算符,具有2个字段和多个条件.目前在LinqPad中编写的有点粗略,但结果正是我想要的;

enum Operator
{
    Equals = 1,
}

class Condition
{
    public string Field { get; set; }
    public Operator Operator { …
Run Code Online (Sandbox Code Playgroud)

c# linq dynamic

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

SQL Merge语句在存储过程中不起作用

以下代码似乎不起作用.如果该地址不存在,则不会插入新记录.但是,如果地址确实存在,则会更新.

ALTER PROCEDURE [Users].[UpdateAddress]
    @UserId int,
    @Address1 varchar(100),
    @Address2 varchar(100),
    @Town varchar(100),
    @County varchar(50),
    @PostCode varchar(50),
    @Country varchar(50),
    @Type INT
AS

MERGE [Users].[Addresses] AS Target
USING (SELECT UserId FROM [Users].[Addresses] WHERE UserId = @UserId) AS Source
ON (Source.UserId = Target.UserId)

WHEN MATCHED THEN
    UPDATE SET Target.Address1 = @Address1,
    Target.Address2 = @Address2,
    Target.Town = @Town,
    Target.County = @County,
    Target.Postcode = @Postcode,
    Target.Country = @Country
WHEN NOT MATCHED BY TARGET THEN
    INSERT ([UserId], [Address1], [Address2], [Town], [County], [PostCode], [Country], [Modified], [Type])
    VALUES(@UserId, …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server stored-procedures

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

复选框列表选中的值

我有一个包含3个项目的复选框列表.我想将复选框列表的所有选中值都放到一个字符串中.我尝试了以下代码,但它没有给出正确的结果.任何人都可以帮助我.

<asp:checkboxlist id="interestedIN" runat="server" repeatlayout="table"
    cellspacing="3" cellpadding="3" Font-Size="12px">
  <asp:ListItem id= "social" runat="server"  text=" Sociology" Selected="false" />
  <asp:ListItem id="zoo" runat="server"  text=" Zoology " Selected="false" />
  <asp:ListItem id="math" runat="server"  text=" mathematics " Selected="false" />
</asp:checkboxlist>
Run Code Online (Sandbox Code Playgroud)

这是C#i实现的:

foreach (ListItem li in interestedIN.Items)
        {
            if (li.Selected)
            {
                interestIN = interestedIN.SelectedItem.Value + "," + interestIN;
            }
        }
Run Code Online (Sandbox Code Playgroud)

输出:如果用户选择社会学和动物学,我希望输出为"社会学,动物学"但我的上述代码给了我以下结果"社会学,社会学".

c# asp.net

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

用于将数据库更改从开发数据库同步到生产的工具?

这可能是一个梦想,但我希望有人知道一个工具,可以配置为比较两个相同数据库中的数据的所有或一些(键)并合并,可能基于关系.

专门为SQL Server寻找一个.

我并不是真的要求最好的一个,但如果它存在,那么听听它是如何被使用会很好.

关于如何管理已完成的工作或在开发中添加数据并将其推送到生产而不复制整个数据库的任何其他想法都是受欢迎的.

谢谢!

sql database sql-server production data-warehouse

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

Automapper 未将 IEnumerable&lt;T&gt; 映射到 Viewmodel 中的 IEnumerable&lt;T&gt;

我定义了以下类;

Data.Models.Lists.List

Infrastructure.Models.Lists.List
Run Code Online (Sandbox Code Playgroud)

两者都包含以下字段;

public int Id { get; set; }

public string Description { get; set; }
Run Code Online (Sandbox Code Playgroud)

我也定义了这个视图模型;

public class IndexViewModel
{
     public IEnumerable<Infrastructure.Models.Lists.List> Lists { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在我的 Automapper 配置中,我只是执行以下操作;

cfg.CreateMap< Data.Models.Lists.List, Infrastructure.Models.Lists.List>()
Run Code Online (Sandbox Code Playgroud)

我认为这就足够了,但我还添加了这个;

cfg.CreateMap<IEnumerable<List>,Models.Lists.IndexViewModel>();
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试映射控制器中的项目时;

var items = ListsService.GetLists(CurrentPrincipal.Id);

var model = Mapper.Map<IndexViewModel>(items);
Run Code Online (Sandbox Code Playgroud)

model.Lists 始终为 null,尽管 items 有 22。还需要添加什么才能使此映射正常工作?

c# asp.net-mvc automapper

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

检查 NULL 时,SQL 查询中的可选参数非常慢

我有许多连接的表,并且最大行数约为 400 万条记录。我们正在存储过程中搜索此表,并且有一个默认值为 NULL 的可选参数,下面是我们正在运行的编辑示例,连接中涉及更多表,但只有 1 个字段具有 WHERE 子句;

DECLARE     @OwnerId VARCHAR (50)=NULL
SET @OwnerId = 'A123456'

SELECT DISTINCT
  t1.Id,
  t2.OwnerId,
FROM
  table1 t1
  INNER JOIN [table2] t2 m ON t1.Id = t2.id
WHERE   
  t2.OwnerId = @OwnerId  
Run Code Online (Sandbox Code Playgroud)

OwnerId 上有一个索引。运行上述查询在不到 1 秒的时间内返回结果 (600)。但是,正如所指出的,该参数是可选的(以及其他参数),只要我稍微更改它以包含该值(如果不是 NULL)(我相信这是这样做的),相同的搜索就会超过 10 秒。

SET @OwnerId = 'A123456'


SELECT DISTINCT
  t1.Id,
  t2.OwnerId,
FROM
  table1 t1
  INNER JOIN [table2] t2 ON t1.Id = t2.id
WHERE   
  (@OwnerId IS null OR (t2.OwnerId = @OwnerId))  
Run Code Online (Sandbox Code Playgroud)

我无法在生产服务器上运行执行计划,但在开发服务器上运行时可以看到略有不同(这没有 400 万行),所以有些事情正在发生变化,但不确定是什么。

sql sql-server

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