VB .Net:Json 不使用 ASHX 返回



我的代码没有返回 Json 响应时遇到问题。我以前从未使用 ASHX 构建过 API。我已经检查了正在创建的 Json 字符串,它似乎很好。

返回的序列化 json 如下所示:

"{""Error"":""Error: Import: Unknown SKU Received!""}" 

这是应返回的正确消息。相反,我收到错误请求作为响应。在我的代码端不会产生任何错误。

代码片段:

Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
Dim oImporter As Importer
Dim oResponse As Domain.Structures.Structures.ReturnResponse
Dim Input_sr As StreamReader
Dim sData As String
Dim bolError As Boolean = False
Dim obj As New Domain.Models.Order.Order
Dim sError As New order_response_error
Dim sResponse As New order_response_success
Try
Input_sr = New StreamReader(context.Request.InputStream)
sData = Input_sr.ReadToEnd
Input_sr.Close()
If context.Request.ContentType.StartsWith("application/json") Then
obj = JsonConvert.DeserializeObject(Of Domain.Models.Order.Order)(sData)
If obj.api_key = ConfigurationManager.AppSettings("api_key") Then
oImporter = New Importer(sData)
oResponse = oImporter.ImportOrder
context.Response.StatusCode = HttpStatusCode.OK
If oResponse.ReturnCode = "Error" Then
bolError = True
context.Response.StatusCode = HttpStatusCode.BadRequest
sError.Error = oResponse.ReturnCode + ": " + oResponse.Message
'sError.Error = String.Format(oResponse.ReturnCode, oResponse.Message)
Else
context.Response.StatusCode = HttpStatusCode.OK
sResponse.vendor_order_id = oResponse.Message
End If
Else
bolError = True
context.Response.StatusCode = HttpStatusCode.Unauthorized
sError.Error = "Error: Access Denied"
'sError.Error = String.Format("Error", "Access Denied")
End If
Else
bolError = True
context.Response.StatusCode = HttpStatusCode.BadRequest
sError.Error = "Error: Invalid content type"
'sError.Error = String.Format("Error", "Invalid content type")
End If
Catch ex As Exception
bolError = True
context.Response.StatusCode = HttpStatusCode.BadRequest
Utils.ErrorEmail("Order Error!", ex, AttachmentName:="Order.xml", AttachmentData:=sData)
sError.Error = String.Format("Error", ex.Message)
End Try
context.Response.ContentType = "application/json"
If bolError Then
context.Response.Write(JsonConvert.SerializeObject(sError))
Else
context.Response.Write(JsonConvert.SerializeObject(sResponse))
End If
End Sub

来自客户端的错误响应:

错误: 缓存控制:
私有 内容类型:应用程序/json;字符集=UTF-8 服务器:Microsoft-IIS/10.0 X-ASP网络版本:4.0.30319 X-源文件: =?UTF-8?B?XFxhd2FyZGdyYXBoaWNzLmNvbVxkYXRhXFVzZXJzXG1ob2xtZXNcRGVza3RvcFxDb2xsYWdlXENvbGxhZ2VcQ29sbGFnZS5XZWIuUG9ydGFsXGFwaVx0ZXN0b3JkZXIxLmFzaHg=?= X供电者:ASP.NET 访问控制允许来源: * 访问控制-允许-方法:
获取、发布、选项 访问控制允许标头:x-request-with,内容类型 日期:
2019年10月14日星期一 14:47:57 GMT 内容长度:48 字节 完整的请求标头 美 秒取模式:秒 产地:铬 extension://aejoelaoggembcahagimdiliamlcdmfm 用户代理:Mozilla/5.0(视窗NT 10.0;赢64;x64( AppleWebKit/537.36 (KHTML, like Gecko( Chrome/77.0.3865.90 Safari/537.36 内容类型:应用程序/JSON 接受:/sec-fetch-site:跨站点 接受编码:gzip,deflate,br 接受语言:en-US,en;q=0.9 Cookie: AspxAutoDetectCookieSupport=1

代码中只有一个地方可以从服务器返回自定义消息,并在以下行中带有"BadRequest":

context.Response.StatusCode = HttpStatusCode.BadRequest
sError.Error = oResponse.ReturnCode + ": " + oResponse.Message

这意味着你的业务逻辑正在返回这个(我不能说得恰当或不合适(。需要跟踪业务逻辑以查找呈现错误 SKU 消息的逻辑。从这个角度来看,ASHX看起来工作正常。

最新更新