我有一个奇怪的问题。我正在开发一个Java项目,我们需要对我们的WEB API进行HTTP GET / POST调用。我想用C#做一个WebAPI测试项目;在本地运行它(在一些随机端口上的localhost)并确保我发送正确的东西。这样我就可以控制发回的内容(成功,错误,JSON,XML以及类似的不同变量)。
到目前为止,我有一些关键的东西:
客户端-Java代码:
[DbFunction("MyContext", "GetSchools")]
public IQueryable<School> GetSchools()
{
...
Server-C#.Net代码(使用fiddler和浏览器测试):
public String sendAPIRequest( HttpRequestMethod method, String apiURI, String payload) throws IOException
{
// Method is GET, POST....
// apiURL specific API navigating to.
// pauload is the html body.
if(payload == null)
{
payload = "";
}
// Establish a connection.
String strURL = String.format("%s%s", this.BaseURL, apiURI);
URL url = new URL(strURL);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestProperty("Accept-Charset", this.CHARSET);
conn.setRequestMethod(method.toString());
conn.setRequestProperty("Content-Type", "text/json;charset=" + this.CHARSET);
conn.setRequestProperty("User-Agent","Mozilla/5.0 ( compatible ) ");
conn.setRequestProperty("Accept","*/*");
conn.setDoInput(true);
conn.setDoOutput(true);
conn.connect();
// write the payload out, if it exists.
//if(payload != null)
{
try(OutputStream output = conn.getOutputStream())
{
output.write(payload.getBytes(CHARSET));
}
}
// read the response.
StringBuilder response = new StringBuilder();
InputStream input = conn.getInputStream();
try(Scanner inputScanner = new Scanner(input))
{
while(inputScanner.hasNextLine())
{
response.append((inputScanner));
}
}
return response.toString();
}
public String CheckForApplicableLicenses(String dCode, String key)
{
String result;
try
{
String APICall = String.format("/license/find_matching?d_code=%s&key=%s", dCode, key);
String Response = API.sendAPIRequest(HttpRequestMethod.GET, APICall);
// TODO Parse the String Response JSON/XMl.
result = Response;
}
catch(Exception ex)
{
// TODO: incorporate some sort of logging and error handling.
result = ex.toString();
}
return result;
}
到目前为止的结果: 我收到了404错误,而且我已经能够连接了。大多数时候,当我创建InputStream时,Java客户端会崩溃。我从来没能在C#服务器上跳过断点。
问题:
1)我正在做什么甚至可行?在我准备好之前,我真的只是在不调用API的情况下尝试测试Java客户端。也许它与未在默认HTTP端口80上运行服务有关?
2)有更好的测试方法吗?在完成之前,我不想打电话给我们的实际服务。
提前感谢您的帮助。