小编Cra*_* W.的帖子

Windows Identity Foundation 4.5配置

我们有一个最初使用.NET 4.0和WIF 3.5(1.0?)构建的应用程序.我正在将其转换为使用WIF 4.5,因为我们已将应用程序升级到.NET 4.5.我已经完成了所有代码更改,并且一直在与配置设置进行斗争.我目前的困境是使用<claimTypeRequired>元素.根据这个文档,它应该是<identityConfiguration>的孩子,但是当我修改我的配置看起来像这样

<system.identityModel>
  <identityConfiguration>
    <claimTypeRequired>
      ...
    </claimTypeRequired>
Run Code Online (Sandbox Code Playgroud)

我在运行时遇到以下错误

Parser Error Message: Unrecognized element 'claimTypeRequired'.
Run Code Online (Sandbox Code Playgroud)

如果我只是注释掉<claimTypeRequired>块,我就会遇到这个错误,但后来又遇到了另一个问题.我们通过以下配置修改了现有应用程序中的maximumClockSkew

<securityTokenHandlerConfiguration>
  <maximumClockSkew value="1" />
</securityTokenHandlerConfiguration>
Run Code Online (Sandbox Code Playgroud)

前面引用的配置文档甚至没有提到maximumClockSkew.我想我会试着把它留进去看看会发生什么.会发生什么

Parser Error Message: Property 'maximumClockSkew' is not a ConfigurationElement.
Run Code Online (Sandbox Code Playgroud)

但是当我使用JustDecompile查看SecurityTokenHandlerConfigurationElement类时,我可以看到该属性:

[ConfigurationProperty("maximumClockSkew", IsRequired=false, DefaultValue="00:05:00")]
[IdentityModelTimeSpanValidator(MinValueString="00:00:00")]
[TypeConverter(typeof(TimeSpanOrInfiniteConverter))]
public TimeSpan MaximumClockSkew...
Run Code Online (Sandbox Code Playgroud)

所以它似乎期待它在那里.

这几乎就像微软实际上并不希望我们使用这些东西.

wif

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

实体框架建议无效的字段名称

我的DataBase中有两个表BUNTS,其中包含有关钢件的信息

CREATE TABLE BUNTS (
    BUNTCODE         INTEGER NOT NULL,
    BUNTNAME         VARCHAR(20),
    BUNTSTEEL        INTEGER,
    ......
);
Run Code Online (Sandbox Code Playgroud)

并且POLL_WEIGHT_BUNTS,其中包含有关每个bunt上执行的操作的信息

CREATE TABLE POLL_WEIGHT_BUNTS (
    PWBCODE            INTEGER NOT NULL,
    PWBBUNTCODE        INTEGER,
    PWBDEPARTMENTFROM  INTEGER,
    PWBDEPARTMENTTO    INTEGER
    ....
);
Run Code Online (Sandbox Code Playgroud)

这种关系是一对多的.我将这些表映射到模型.一切都很好.最近我决定在表BUNTS中添加一个字段,该字段将引用在bunt上执行的最后一个操作:

BUNTLASTOPER     INTEGER
Run Code Online (Sandbox Code Playgroud)

现在我的模型看起来像这样:

[Table("BUNTS")]
public class Bunt
{
    [Key]
    [Column("BUNTCODE")]
    public int? Code { set; get; }
    [Column("BUNTNAME")]
    public string Name { set; get; }
    [Column("BUNTSTEEL")]
    public int? SteelCode { set; get; }
    [Column("BUNTLASTOPER")]
    public int? LastOperationID { set; get; }
    [ForeignKey("LastOperationID")]
    public …
Run Code Online (Sandbox Code Playgroud)

.net c# firebird entity-framework

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

将JSON字符串解析为List <string>

string json = "{\"People\":[{\"FirstName\":\"Hans\",\"LastName\":\"Olo\"}
                            {\"FirstName\":\"Jimmy\",\"LastName\":\"Crackedcorn\"}]}";

var obj = JObject.Parse(json);

List<string> first;
List<string> last;

foreach (var child in obj["People"].Children())
{
    var name = child.First()["countryName"].ToString();
    var two = child.First()["countryCode"].ToString();
    var three = child.First()["isoAlpha3"].ToString();

    countries.Add(name);
    twoCharCodes.Add(two);
    threeCharCodes.Add(three);

    Console.Write("Name:\t\t{0}\n2CharCode:\t{1}\n3CharCode:\t{2}\n\n", name, two, three);
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法将每个FirstName值添加到第一个List中,并与LastName值和最后一个List相同.这样做的最佳方法是什么?

上面的代码打破了:

var name = child.First()["countryName"].ToString();
Run Code Online (Sandbox Code Playgroud)

有这个错误:

 Cannot access child value on Newtonsoft.Json.Linq.JProperty
Run Code Online (Sandbox Code Playgroud)

有什么建议?

c# json list

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

MVC传递模型来查看

我的Index.cshtml

@model ReportGenerator.WebUI.Models.ReportViewModel
@Html.TextBoxFor(m => m.report.FileName, new { @class = "form-control", id = "FileName" })
Run Code Online (Sandbox Code Playgroud)

我的控制器

public ActionResult Index(ReportViewModel model)
{
    ...some stuff
    model.report = new Report();
    model.report.FileName = "INDEX";
    return View(model);
}

public ActionResult fillFields(ReportViewModel _model)
{
    ...some stuff
    _model.report = new Report();
    _model.report.FileName = "FILL";
    return View("Index", _model);
}
Run Code Online (Sandbox Code Playgroud)

当我运行我的应用程序时,该TextBox Text属性设置为"INDEX".此外,当我点击一个调用fillFields控制器动作的按钮时,TextBox仍然显示"INDEX",它不会变为"FILL".

我究竟做错了什么?为什么不想工作?

c# asp.net-mvc asp.net-mvc-4

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

WebApi Put"参数字典包含参数的空条目..."

public class ContactsController : ApiController
{
    private static readonly List<Contact> _contacts = new List<Contact>();
    public Contact PutContacts(int id, Contact contact)
    {
        if (_contacts.Any(c => c.Id == contact.Id) == false)
        {
            throw new HttpResponseException(HttpStatusCode.NotFound);
        }
        contact.LastModified = DateTime.Now;
        return contact;
    }
}
Run Code Online (Sandbox Code Playgroud)

http put header:

PUT /api/contacts/3 HTTP/1.1
User-Agent: Fiddler
Content-Type: application/json
Host: localhost:8080
Run Code Online (Sandbox Code Playgroud)

身体:

{"Id":3,"Name":"mmm","Phone":"000 000 0000","Email":"mmm@gmail.com","LastModified":"2012-03-08T23:42:13.8681395+08:00"}
Run Code Online (Sandbox Code Playgroud)

响应:

HTTP/1.1 400 Bad Request
"The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'SelfHost.Contact PutContacts(Int32, …
Run Code Online (Sandbox Code Playgroud)

self-hosting asp.net-mvc-4

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

从C#调用SQL select语句数千次,非常耗时.有没有更好的办法?

我从excel文件中获取了ID和金额列表(数千个id和相应的金额).然后我需要检查数据库以查看每个ID是否存在以及是否检查以确保DB中的金额大于或等于excel文件中的金额.

问题是运行此select语句超过6000次并返回我需要的值需要很长时间.即使在1/2秒的时间内,所有选择也需要大约一个小时.(我通常最多不会得到超过5个结果)

有更快的方法吗?

是否有可能以某种方式同时传递所有ID,只需拨打1个电话并获得大量收藏?

我尝试过使用SqlDataReaders和SqlDataAdapters,但它们看起来差不多(两种方式都太长)

以下是如何工作的一般概念

for (int i = 0; i < ID.Count; i++)
{
    SqlCommand cmd = new SqlCommand("select Amount, Client, Pallet from table where ID = @ID and Amount > 0;", sqlCon);

    cmd.Parameters.Add("@ID", SqlDbType.VarChar).Value = ID[i];

    SqlDataAdapter da = new SqlDataAdapter(cmd);

    da.Fill(dataTable);
    da.Dispose();           
}
Run Code Online (Sandbox Code Playgroud)

c# sql sql-server

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

StatusCodeResult或ResponseMessageResult

我已经看到从Web API以两种不同的方式发送响应.

return ResponseMessage(new HttpResponseMessage(HttpStatusCode.UnsupportedMediaType));
Run Code Online (Sandbox Code Playgroud)

要么

return StatusCode(HttpStatusCode.UnsupportedMediaType);
Run Code Online (Sandbox Code Playgroud)

两人最终都会向调用者发回415.我已经查看了两个结果类的MSDN文档,但仍然无法弄清楚有什么不同或为什么我会选择一个而不是另一个.

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

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

使用ILMerge抛出异常创建签名库

我正在尝试创建包含Castle.Core的FakeItEasy的合并版本.我读到了有关ILMerge的信息,看起来这是我需要的解决方案.下载并构建FakeItEasy后,我将所需的所有文件(FakeItEasy.dll(.NET4),Castle.Core.dll(.NET4),ilmerge.exe,FakeItEasy.snk)复制到同一文件夹中.然后我运行以下命令:

ilmerge 
    /keyfile:FakeItEasy.snk 
    /out:..\FakeItEasy.dll 
    /t:library 
    /targetplatform:v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319 
    FakeItEasy.dll Castle.Core.dll 
Run Code Online (Sandbox Code Playgroud)

得到以下结果:

An exception occurred during merging:                                                             
An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)                                                                                                
   at System.Compiler.Writer.MscorsnStrongNameSignatureGeneration(String wszFilePath, String wszKeyContainer, Byte[] pbKeyBlob, Int32 cbKeyBlob, IntPtr ppbSignatureBlob, IntPtr pcbSignatureBlob)  
   at System.Compiler.Writer.WritePE(String location, Boolean writeDebugSymbols, Module module, Boolean delaySign, String keyFileName, String keyName)                                              
   at System.Compiler.Writer.WritePE(CompilerParameters compilerParameters, Module module)        
   at ILMerging.ILMerge.Merge()                                                                   
   at ILMerging.ILMerge.Main(String[] args) 
Run Code Online (Sandbox Code Playgroud)

如果我放弃"/keyfile:FakeItEasy.snk",合并的程序集就会很好地创建,但这对我没有帮助,因为我需要一个签名版本.

我也尝试将目标平台指定为:

/targetplatform:v4,C:\Windows\Microsoft.NET\Framework64\v4.0.30319
Run Code Online (Sandbox Code Playgroud)

但结果是一样的.

.net ilmerge assembly-signing

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

如何在调试时看到IEnumerable的元素?

我正在使用IEnumerable,在调试器中我想看到它有的项目,但我不能,因为没有任何属性也没有项目.

是否可以看到具有IEnumerable的项目?

c# debugging visual-studio

5
推荐指数
3
解决办法
2828
查看次数

Azure 服务总线触发函数 - 绑定到 MessageReceiver

我正在尝试在 Azure 服务总线触发函数中绑定到 MessageReceiver。我的目标是处理死信队列消息并完成它们。

public static class Function1
{
    [FunctionName("Function1")]
    public static async Task Run([ServiceBusTrigger("<topicName>", "<subscriptionName>/$DeadLetterQueue", Connection = "connectionstring")]Message message,
        ILogger logger,
        MessageReceiver messageReceiver)
    {
        // TODO: Perform some actions

        await messageReceiver.CompleteAsync(message.SystemProperties.LockToken);
    }
Run Code Online (Sandbox Code Playgroud)

问题是它无法绑定到 Message 接收器类。

Microsoft.Azure.WebJobs.Host:索引方法“Function1”时出错。Microsoft.Azure.WebJobs.Host:无法将参数“接收器”绑定到类型 MessageReceiver。确保绑定支持参数类型。如果您使用绑定扩展(例如 Azure Storage、ServiceBus、Timers 等),请确保您已在启动代码(例如 builder.AddAzureStorage()、builder.AddServiceBus() 中调用了扩展的注册方法)、builder.AddTimers() 等)。

为什么我绑定失败的任何想法?

c# azure azureservicebus .net-core azure-servicebus-topics

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