小编Rae*_*ark的帖子

对于一般不成功的请求(不是错误),适当的HTTP状态代码响应是什么?

我正在创建一个RESTful API,它将处理大量用户交互,包括使用存储的信用卡下订单.

如果订单成功,我将返回200 OK,如果订单请求格式错误或无效,我将返回400 Bad Request.但是,如果在订单的实际处理过程中出现问题,我应该返回什么?

  1. 客户端POSTS为服务器订购用户资源.如果用户不存在,则返回404 Not Found.
  2. 订单格式和信息经过验证.如果无效,则返回400 Bad Request.
  3. 订单已处理完毕.如果订单成功,则会为订单返回201 Created.如果遇到意外错误,则返回500 Server Error.

最后一步是问题 - 如果订单因任何其他原因没有完成,我该返回什么?可能的情况包括:

  • 产品已售罄
  • 达到用户最大订单限制
  • 信用卡交易失败(资金不足等)

这似乎不适合400或500.如果没有更好的代码,我可以将其视为400 - 根据业务规则,请求无效.它似乎不准确.

编辑:还发现了这个相同主题的现有讨论.所有答案似乎都指向使用此类违规的状态代码,并在使用400,409或422扩展之间进行了一些讨论.

rest http http-status-codes

98
推荐指数
5
解决办法
4万
查看次数

如何在Javascript中处理ActiveX事件

这在某种程度上是对这里答案的后续行动.

我有一个自定义ActiveX控件,它引发了一个事件(带有"msg"参数的"ReceiveMessage"),需要在Web浏览器中由Javascript处理.从历史上看,我们已经能够使用以下仅IE语法在不同项目上实现此目的:

function MyControl::ReceiveMessage(msg)
{
   alert(msg);
}
Run Code Online (Sandbox Code Playgroud)

但是,当在掩埋控件的布局内部时,Javascript无法找到控件.具体来说,如果我们把它放到一个普通的HTML页面,它工作正常,但如果我们将它放入由<Form>标签包装的ASPX页面,我们会得到一个"MyControl is undefined"错误.我们尝试过以下变体:

var GetControl = document.getElementById("MyControl");
function GetControl::ReceiveMessage(msg)
{
   alert(msg);
}
Run Code Online (Sandbox Code Playgroud)

...但它会导致Javascript错误"GetControl未定义".

处理从ActiveX控件发送的事件的正确方法是什么?现在我们只对在IE中工作感兴趣.这必须是我们正在做的自定义ActiveX控件.

谢谢.

javascript events activex

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

如何在调用 Crystal Reports ExportToHttpResponse 方法后运行清理代码?

我们在 ASP.Net 应用程序中遇到了一个问题,即在为用户生成报告后,Crystal Reports 引擎在服务器的 Temp 文件夹中留下垃圾 .tmp 文件。

所以我们试图弄清楚如何在 Report 对象上运行 .Close() 和 .Dispose() 方法,但我们发现在导出发生后代码永远不会运行。

MyReport.Report.ExportToHttpResponse(ExportFormatType.PortableDocFormat, 
        this.Response, true, "My_Report");

MyReport.Report.Close();
MyReport.Report.Dispose();
Run Code Online (Sandbox Code Playgroud)

设置在最后两行的断点永远不会被命中,我们还尝试将其他代码放在那里来测试处理。没有一个运行。(我也在其他具有类似代码的网站上看到过这个问题,但没有答案)

我假设此时 ExportToHttpResponse 方法正在向用户返回文件流 (PDF),结束处理,因此其余代码不会运行。如果是这种情况,我们如何让 CR 对临时文件执行清理,而 Close() 和 Dispose() 方法应该这样做?我们是否必须实施手动事后清理?

asp.net crystal-reports

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

如何在Dapper中使用包装的Query方法支持多个类型参数(使用DapperWrapper)?

我们使用DapperWrapper类来扩展和包装Dapper IDbConnection接口,以支持测试我们的存储库层.但是,在尝试使用Dapper中的父/子映射支持将查询中的多个结果集映射回分层对象时,我们遇到了一个问题,如此处的ParentChildIdentityAssociations示例测试中所示:

https://github.com/SamSaffron/dapper-dot-net/blob/master/Tests/Tests.cs#L1443

所以Dapper支持这个功能,但是当我们在DapperWrapper中使用IDbExecutor时,似乎会丢失对多个类型参数的支持.当我尝试执行以下操作时,出现编译错误"类型参数数量不正确".

var results = Db.Query<Deal, DealOption, Deal>(template.RawSql, template.Parameters).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

来自DapperWrapper的以下示例说明了我们实际调用的方法以及随附的SqlConnection对象(使用Dapper扩展).原始SqlConnection/IDbConnection对象是否支持由T定义的多个类型参数是有原因的,而以相同方式定义的包装方法不会?

public IEnumerable<T> Query<T>(
    string sql, 
    object param = null,
    IDbTransaction transaction = null,
    bool buffered = true,
    int? commandTimeout = default(int?),
    CommandType? commandType = default(CommandType?))
{
    return _sqlConnection.Query<T>(
    sql, 
    param,
    transaction,
    buffered,
    commandTimeout,
    commandType);
}
Run Code Online (Sandbox Code Playgroud)

.net c# dapper

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

为什么从Dapper返回的对象具有null和default属性值?

我在存储库中使用Dapper将查询结果映射到我要返回的API的DTO类型列表.一切似乎都正常工作但在查询和映射完成后,列表中填充了正确数量的对象,但所有int属性都为0,字符串为null.我在其他项目中使用了Dapper,并且从未遇到过这种情况.我还验证了数据是正确的,如果我将查询复制到SQL Management Studio,它会给我正确的数据.

这是包含自定义映射逻辑的存储库基类的构造函数.我确认这个代码很受欢迎.

static BaseRepository()
{
    SqlMapper.SetTypeMap(typeof(T),
      new CustomPropertyTypeMap(
          typeof(T), (type, columnName) => type.GetProperties()
              .FirstOrDefault(prop => prop.GetCustomAttributes(false)
                      .OfType<ColumnAttribute>()
                      .Any(attr => attr.Name == columnName))));
}
Run Code Online (Sandbox Code Playgroud)

以下是填充列表的存储库方法:

public IEnumerable<Dog> GetAll()
{
    var dogs = Db.Query<Dog>(@"SELECT Id, Name FROM Dogs");
    return dogs;
}
Run Code Online (Sandbox Code Playgroud)

这是我的目标:

[DataContract]
public class Dog
{
    [DataMember]
    public int Id { get; set; }

    [DataMember]
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

所以我已经确认"狗"变量被填充,但所有Id和Name元素都是0或null.以下是最终的JSON结果:

[
    {
        Id: 0,
        Name: null
    },
    {
        Id: 0,
        Name: null
    },
    {
        Id: …
Run Code Online (Sandbox Code Playgroud)

.net c# dapper

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

如何判断用户帐户是否已使用ASP.Net Forms身份验证登录?

我们的SSO登录过程对SQL Server中的自定义用户存储使用表单身份验证.

我们的新安全要求之一是仅允许帐户一次拥有一个活动会话.因此,只要用户登录,我们就会检查登录凭据是否已经处于活动状态,并且最好阻止新用户再次登录,直到其他会话结束.或者,如果更容易实现,我们可以强制其他会话结束.

使用表单身份验证有一种简单的方法吗?我们已经考虑了一种自定义方法,我们跟踪数据库中的每个会话,但这将是很多工作,我们可能必须修改我们的所有应用程序来检测session_end,我希望避免.我认为Forms Auth中必须有一些东西来处理这个问题.

我见过MembershipUser.IsOnline()方法,看起来很理想,但我们没有使用会员提供程序.

更新:为了清楚,我不需要检查当前用户是否已登录,我需要知道其他人是否已使用同一帐户登录.

asp.net security forms-authentication

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

如何在ASP.NET Web API(或一般的REST)中添加/更新类集合导航属性

这是我正在处理的Web API项目特有的设计问题,但它可能是REST原则的一般问题.我也可能完全过分思考这个问题.

我在Entity Framework中有一个类,它有另一个类的子集合:

public abstract class Tracker
{
    [Key]
    public int ID { get; set; }

    [MaxLength(50)]
    public string Name { get; set; }

    public virtual ICollection<Unit> Units { get; set; }      
}
Run Code Online (Sandbox Code Playgroud)

Unit类看起来像这样:

public class Unit
{
    [Key]
    public int ID { get; set; }

    [MaxLength(50)]
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我正在开发一个Web API,它将获取跟踪器列表,并获取可用单元列表,然后将一个特定单元添加到跟踪器的单元列表中.跟踪器和单元有自己的API控制器和存储库,我试图弄清楚如何修改它们以支持创建这种关联,以及请求的样子.

是否适合通过PUT更新Tracker端点(/ Trackers/1)以将新单元添加到列表中,可能与现有单元一起添加?我该如何处理后端?我认为我对PUT方法的一个心理障碍是 - 我会将整个子对象包含在请求正文集合属性中吗?它没有意义,但我不确定它会如何起作用.假设(在我的情况下)将是添加到跟踪器列表中的单元将是已存在的单元,我们只是创建关联.我是否应该使用DTO来实现这两个目标,并相应地映射它们?

或者更有意义的是创建一个新的联合DTO,比如"TrackerUnit",它有一个相应的端点,我可以通过POST到该端点(POST/TrackerUnits)添加新的关联,然后在新的控制器中处理它的处理?我认为它还需要支持DELETE来删除项目.我并不为这种方法感到疯狂,因为这个端点不对应于我系统中的任何实际资源,而只是用于映射这些关联.

rest entity-framework asp.net-web-api

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

是否可以在经典ASP页面上使用GZIP压缩?

我们有一个经典的ASP应用程序正在推出一些非常大的报告,其中生成的HTML是几MB.通过减少无关的HTML,我们在减少修改方面取得了很大进展,但我想知道是否有任何方法可以在这些动态.asp页面上启用GZIP压缩.我确信压缩它们对文件大小是一个巨大的好处.

我见过的所有GZIP压缩信息只涉及支持文件或.aspx页面.

谢谢.

compression gzip asp-classic

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