You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求Astrometry.NET登录接口的正确C#/VB.NET JSON POST请求代码

Astrometry.NET 登录接口 VB.NET/C# 代码修正方案

当前调用Astrometry.NET登录接口时返回 {"status": "error", "errormessage": "no json"},期望接口能正确识别JSON请求(哪怕用错误密钥也应返回"bad apikey")。

原VB.NET代码:

Dim LoginURL As String = "http://nova.astrometry.net/api/login"

Dim Enc As System.Text.Encoding = System.Text.Encoding.UTF8
Dim MediaType As String = "application/json"
Dim JSONContent As String = "{""apikey"": """ & APIKey & """}"

Dim C2String As New System.Net.Http.StringContent(JSONContent , Enc, MediaType)

'Run the query
Dim MyClient As New System.Net.Http.HttpClient
Dim F As System.Net.Http.HttpResponseMessage = Await MyClient.PostAsync(LoginURL, C2String)
Dim Code As String = Await F.Content.ReadAsStringAsync()

修正后的VB.NET代码

Imports System.Net.Http
Imports System.Text.Json

Public Async Function AstrometryLoginAsync(apiKey As String) As Task(Of String)
    Dim loginUrl As String = "http://nova.astrometry.net/api/login"
    
    ' 使用JsonSerializer生成标准JSON,避免手动拼接的格式错误
    Dim requestData = New With {.apikey = apiKey}
    Dim jsonContent = JsonSerializer.Serialize(requestData)
    
    ' 明确设置Content-Type为application/json,确保服务器识别
    Dim content = New StringContent(jsonContent, System.Text.Encoding.UTF8, "application/json")
    
    ' 用Using块管理HttpClient生命周期,避免资源泄漏
    Using client As New HttpClient()
        Dim response = Await client.PostAsync(loginUrl, content)
        Return Await response.Content.ReadAsStringAsync()
    End Using
End Function

对应的C#代码

using System.Net.Http;
using System.Text.Json;

public async Task<string> AstrometryLoginAsync(string apiKey)
{
    string loginUrl = "http://nova.astrometry.net/api/login";
    
    var requestData = new { apikey = apiKey };
    string jsonContent = JsonSerializer.Serialize(requestData);
    
    var content = new StringContent(jsonContent, System.Text.Encoding.UTF8, "application/json");
    
    using (HttpClient client = new HttpClient())
    {
        HttpResponseMessage response = await client.PostAsync(loginUrl, content);
        return await response.Content.ReadAsStringAsync();
    }
}

关键修正点

  • 使用System.Text.Json序列化对象生成JSON,避免手动拼接字符串可能导致的格式错误(比如APIKey含特殊字符时)。
  • 确保StringContent的MediaType参数精确设置为"application/json",让服务器明确识别请求体格式。
  • 添加Using块管理HttpClient生命周期,避免资源泄漏。

修改后,即使传入错误的APIKey,接口也会返回{"status": "error", "errormessage": "bad apikey"},说明请求已被正确识别。

内容的提问来源于stack exchange,提问作者Martin Weiss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 14:25:02