小编Joh*_*ika的帖子

System.Text.Json:使用自动转换反序列化 JSON

使用 .Net Core 3 的新 System.Text.Json JsonSerializer,如何自动转换类型(例如 int 到 string 和 string 到 int)?例如,这会引发异常,因为id在 JSON 中是数字,而在 C# 中需要Product.Id一个字符串:

public class HomeController : Controller
{
    public IActionResult Index()
    {
        var json = @"{""id"":1,""name"":""Foo""}";
        var o = JsonSerializer.Deserialize<Product>(json, new JsonSerializerOptions
        {
            PropertyNameCaseInsensitive = true,
        });

        return View();
    }
}

public class Product
{
    public string Id { get; set; }
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Newtonsoft 的 Json.Net 很好地处理了这个问题。如果您在 C# 期望字符串时传入数值并不重要(反之亦然),一切都按预期反序列化。如果您无法控制作为 JSON 传入的类型格式,您如何使用 System.Text.Json 处理此问题?

c# json.net .net-core asp.net-core system.text.json

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

Facebook API:如何在没有offline_access权限的情况下在用户离线时发布到页面Feed

使用Facebook的Graph API,我成功地在用户离线时发布到用户的Feed,只有publish_stream权限.我不需要offline_access权限.我在这里解释了我是如何做到的:Facebook Stream在离线时发布

当用户离开时,我没有成功发布到页面.这是我的情景:

用户U是Page P. P的管理员,授权并安装我的应用程序.U授权我的应用程序并授予我以下扩展权限:

  • publish_stream
  • manage_pages

一旦用户离线,如果我尝试使用相同的技术发布到用户的流(没有offline_access权限)而是发布到页面,我得到"用户没有授权应用程序执行此操作".这是技术:

1)获取我的应用程序的access_token

2)使用我的应用程序的access_token发布到Page P的提要: POST https://graph.facebook.com/ {page_id}/feed

如果在步骤2中使用{user_id}代替{page_id},那么它会毫无问题地发布到用户的Feed.但是,我想发布到Page的Feed.是否有可能做到这一点?或者我是否需要用户的offline_access权限才能执行此操作?

谢谢,约翰尼

facebook facebook-graph-api

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

Github 可重用工作流程:如何使用上次提交(或分支头)的工作流程而不是硬编码分支名称/发布版本?

我正在使用 GitHub 操作设置可重用的工作流程:https://docs.github.com/en/actions/learn-github-actions/reusing-workflows

由于被调用者工作流程和调用者工作流程都位于同一存储库中,因此我想在调用工作流程的uses语句中引用被调用工作流程的最新提交。

例子:

uses: owner/repo/.github/workflows/called-workflow.yml@${{GITHUB_SHA}}
Run Code Online (Sandbox Code Playgroud)

${{GITHUB_SHA}}不会被插值,所以我收到以下错误:

Invalid workflow file : .github/workflows/calling-workflow.yml#L1
handling usage of workflow "owner/repo/.github/workflows/called-workflow.yml@${{GITHUB_SHA}}": can't obtain workflow file: reference to workflow should be either a valid branch, tag, or commit
Run Code Online (Sandbox Code Playgroud)

ref在工作流程中调用工作流程时,如何将其设置为最新提交?

github github-actions

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

ASP.NET MVC ModelMetaData:有没有办法根据RequiredAttribute设置IsRequired?

Brad Wilson在ASP.NET MVC的新ModelMetaData上发布了一个很棒的博客系列:http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-2-modelmetadata.html

在其中,他描述了如何在Views和模板化助手中公开ModelMetaData类.我想要做的是如果字段是必需的,在表单字段标签旁边显示一个星号,所以我考虑使用ModelMetaData的IsRequired属性.但是,默认情况下,IsRequired对于所有非可空属性都是true,而对于所有可为空的属性都是false.问题是,字符串总是可以为空的,因此字符串的IsRequired属性始终为false.有谁知道如何覆盖IsRequired的默认设置?或者,我考虑利用我一直在用我的属性装饰的RequiredAttribute属性,但似乎没有通过ModelMetaData类公开RequiredAttribute.有谁知道如何解决这个问题?

提前致谢.

asp.net-mvc data-annotations asp.net-mvc-2

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

下划线/ Microtemplate替换换行符 - 奇怪的行为

我正在使用Underscore模板(基于John Resig的Microtemplate),每当我尝试更换其中的换行符时,我都会遇到奇怪的行为.例如,如果我有这样的文字:

var message = 'Line1\r\n\r\nLine2';
Run Code Online (Sandbox Code Playgroud)

如果我这样做,我可以用br标签正确替换换行符:

$('#example1_no_template').html(message.replace(/\r?\n/g, '<br />'));
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试用下面的示例代码替换Underscore模板中的换行符,我不会插入任何br标签:

<script id="template1" type="text/html">
    <%= message.replace(/\r?\n/g, '<br />') %>
</script>

<script>
var template1 = _.template($('#template1').html());
$('#example1_template').html(template1({ message: message }));
</script>
Run Code Online (Sandbox Code Playgroud)

奇怪的是,如果我将模板中的正则表达式更改为以下内容,那么我会在各处插入各种br标签:

<script id="template3" type="text/html">
    <%= message.replace(/[\r\n?]/g, '<br /><br />') %>
</script>
Run Code Online (Sandbox Code Playgroud)

所有这些行为都显示在这个小提琴中:http://jsfiddle.net/GHtDY/5/

知道发生了什么事吗?是否可以替换模板中的换行符?

javascript regex templates underscore.js underscore.js-templating

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

用于更新对象图的REST API设计

我正在设计一个REST API,我正在寻找更新对象图的推荐最佳实践.我的问题最好在一个例子中解释,所以让我说我有一个GET资源如下:

URI:/ people/123

此URI返回如下对象图:

{
    "name":"Johnny",
    "country":{"id":100,"name":"Canada"},
    "likes":[
        {"id":5,"name":"Fruit"},
        {"id":100,"name":"Sports"}
    ]
}
Run Code Online (Sandbox Code Playgroud)

当允许API使用者更新此资源时,您希望通过PUT或PATCH更新对象?更新"name"属性非常简单,但我不确定"country"或"likes",因为消费者只能改变与其他对象的关系而不能创建新对象.

以下是请求更新的一种方法:

{
    "name":"Bob",
    "countryId":200
    "likeIds":[3,10,22]
}
Run Code Online (Sandbox Code Playgroud)

此更新将资源更改为以下内容:

{
    "name":"Bob",
    "country":{"id":200,"name":"United States of America"},
    "likes":[
        {"id":3,"name":"Cars"},
        {"id":10,"name":"Planes"},
        {"id":22,"name":"Real Estate"}
    ]
}
Run Code Online (Sandbox Code Playgroud)

这种设计明确而明确地要求消费者只更新"人物"的"ID",但我担心PUT/PATCH的对象图看起来与GET不同,这使得API难以学习和记忆.所以另一种选择是按如下方式请求PUT/PATCH:

{
    "name":"Bob",
    "country":{"id":100},
    "likes":[
        {"id":3},
        {"id":10},
        {"id":22}
    ]
}
Run Code Online (Sandbox Code Playgroud)

这将产生与先前更新相同的更改,并且不会更改对象图.但是,API消费者并未明确只能更新"ID".

在这种情况下,建议采用哪种方法?

api rest object-graph

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

在为特定URL提供app_offline.htm时,将http状态503更改为200

ASP.NET服务的app_offline.htm文件返回http状态503.这是大多数情况下的正确行为.但是,在请求特定URL的情况下(例如https://www.mywebsite.com/monitor),我想将返回的http状态更改为200,同时在所有其他情况下仍返回http状态503.这可能吗?

我之所以这样做是因为每当我们在我们的网站上进行定期维护时,我们都会使用app_offline.htm文件,但我们不希望我们的正常运行时间监控服务(Pingdom.com)在我们的计划维护期间报告停机时间.

我认为这必须在IIS级别,因为app_offline.htm在请求处理周期中很早就得到了服务.

asp.net iis asp.net-mvc iis-7 app-offline.htm

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

Ember数据模型的错误属性(DS.Errors)未填充

我正在使用Ember Data,我似乎无法获得模型的'errors'属性来填充来自我的REST API的错误消息.我非常关注本指南中的示例:

http://emberjs.com/api/data/classes/DS.Errors.html

我的应用程序如下所示:

    window.App = Ember.Application.create();

    App.User = DS.Model.extend({
        username: DS.attr('string'),
        email: DS.attr('string')
    });

    App.ApplicationRoute = Ember.Route.extend({
        model: function () {
            return this.store.createRecord('user', {
                username: 'mike',
                email: 'invalidEmail'
            });
        },

        actions: {
            save: function () {
                this.modelFor(this.routeName).save();
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

我的API返回:

HTTP/1.1 400 Bad Request
Content-Type: application/json; charset=utf-8
Content-Length: 125

{
  "errors": {
    "username": ["Username is taken!"],
    "email": ["Email is invalid."]
  }
}
Run Code Online (Sandbox Code Playgroud)

在模型上调用save()后,我在用户模型上看到的是:

user.get('isError') // true
user.get('errors.messages') // []
Run Code Online (Sandbox Code Playgroud)

即使模型正确地注册了isError属性,我也似乎无法填充错误消息.我怎样才能让它发挥作用?我正在研究Ember Data版本1.0.0-beta.8.2a68c63a的最新beta版本

ember.js ember-data

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

如何让Coldfusion 10在Windows 10中与IIS 10一起使用

Windows 10附带IIS 10,ColdFusion 10似乎不喜欢它.ColdFusion 10安装得很好,但是当需要创建连接器时(无论是在安装过程中还是使用工具C:\ColdFusion10\cfusion\runtime\bin\wsconfig.exe),它都会失败.我得到的错误消息是它不支持IIS 10.

在此输入图像描述

需要此连接器才能在IIS中设置CFIDEjakarta虚拟文件夹.

有什么方法吗?

iis coldfusion coldfusion-10 windows-10

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

System.Net.ServicePointManager.DefaultConnectionLimit == 24 - > BUG?

在我的调试器中检查.Net 4中的System.Net.ServicePointManager.DefaultConnectionLimit时,我看到非常高的数字.我在一台机器上看到24,在另一台机器上看到48.

对于新创建的ASP.NET MVC 3项目,即使没有对其进行任何配置更改,情况也是如此.这是一个错误吗?文档明确指出默认值为2:

ServicePoint对象允许的最大并发连接数.默认值为2.

来自http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.defaultconnectionlimit(v=VS.100).aspx

DefaultNonPersistentConnectionLimit和DefaultPersistentConnectionLimit字段分别是更真实的4和2,但DefaultConnectionLimit数字似乎超出范围.

.net asp.net .net-4.0

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