我正在尝试创建一个基本的测试Web api,并使用标准控制器对其进行测试。 当我运行它时, http://localhost:55144/home/testapi
它将运行catcher函数并完全忽略该参数。 然后,捕获器将愉快地返回一个值,该值可以在调用代码中看到。
我尝试了各种组合,包括[FromBody],在TestApiMethod中更改参数的类型以及查看创建列表或数组是否有区别。
我注意到一些奇怪的事情: -我没有在TestApiMethod的代码中使用该参数,但是Visual Studio并未向我发出未使用的变量警告。 -如果我将参数testString的类型设置为字符串甚至是int,则下面的代码将路由到捕获器。如果我对模型或Jobject进行了一些修改,则不会。它可以达到运行状态
HttpResponseMessage response = await client.PostAsJsonAsync("api/activity", sendData);
然后仅返回网页。
代码如下:
模型
public class testStringModel
{
public string testString { get; set; }
}
public class apiResponse
{
public string response { get; set; }
}
家庭控制器调用Api:
public void TestApi()
{
Task myTask = testApiCall();
}
private async Task<string> testApiCall()
{
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://localhost:55144");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
testStringModel data = new testStringModel { testString = "cheese" };
string jsonData = JsonConvert.SerializeObject(data);
var sendData = new StringContent(jsonData, Encoding.UTF8, "application/json");
//var sendData = new Dictionary<string, string>
//{
// {"testString", "cheese"}
//};
HttpResponseMessage response = await client.PostAsJsonAsync("api/activity", sendData);
string responseBodyAsText = await response.Content.ReadAsStringAsync();
dynamic stuff = JObject.Parse(responseBodyAsText);
string finalResponse = stuff.response;
return finalResponse;
}
}
api:
namespace ApplicationActivity
{
public class ActivityController : ApiController
{
[System.Web.Http.HttpPost]
public HttpResponseMessage Catcher()
{
apiResponse apiResponseObject = new apiResponse();
apiResponseObject.response = "You have somehow wound up in the catcher";
string json = JsonConvert.SerializeObject(apiResponseObject);
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, "value");
response.Content = new StringContent(json, Encoding.Unicode, "application/json");
response.Headers.CacheControl = new CacheControlHeaderValue()
{
MaxAge = TimeSpan.FromMinutes(20)
};
return response;
}
[System.Web.Http.HttpPost]
public HttpResponseMessage TestApiMethod(string testString)
{
apiResponse apiResponseObject = new apiResponse();
apiResponseObject.response = "OK from test";
string json = JsonConvert.SerializeObject(apiResponseObject);
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, "value");
response.Content = new StringContent(json, Encoding.Unicode, "application/json");
response.Headers.CacheControl = new CacheControlHeaderValue()
{
MaxAge = TimeSpan.FromMinutes(20)
};
return response;
}
}
}
请您告诉我我的代码在做什么错,如何解决它以及当代码没有到达捕获器时会发生什么情况?
谢谢。
答案 0 :(得分:0)
事实证明,我使用的是Visual Studio的旧版本,结果整个事情与是否正在运行.net core完全混淆了。 升级到最新版本并确保安装了最新的.net内核,从而解决了我的大部分麻烦