【发布时间】:2017-02-01 04:42:55
【问题描述】:
我在 Web API 中使用自定义 oauth 进行身份验证。现在我想从 MVC 控制器调用 web api 方法。 Web API 方法:
public class UserController : ApiController
{
[Authorize(Roles = "Admin")]
[HttpPost]
[ActionName("UserById")]
public IEnumerable GetUserById(string idValue)
{
long ID = idValue != "" ? Convert.ToInt64(idValue) : -1;
using (var db = new DataModelContext())
{
IEnumerable query = (from b in db.User.Include(u => u.EmailAddresses).ToList()
where b.Id == ID
select new { b.Id, UserName = b.UserName, b.EmailAddresses }).ToList();
return query;
}
}
}
MVC 控制器:
public class PagesController : Controller
{
public ActionResult GetUserById(long id)
{
string baseUrl = Common.GetAPIUrl();
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.BaseAddress = new Uri(baseUrl);
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", Common.GetoAuth().access_token);
var values = new JObject();
values.Add("idValue",id.ToString());
HttpContent content = new StringContent(values.ToString(), Encoding.UTF8, "application/json");
HttpResponseMessage response = client.PostAsJsonAsync(baseUrl + "/api/User/UserById", content).Result;
string resultJSON = response.Content.ReadAsStringAsync().Result;
return View("UserDetail",resultJson);
}
}
有些它不工作,我无法纠正为什么它不工作的问题。当我从邮递员调用 API 直接 URL 时,它工作正常。比如http://localhost:55362/api/UserById/2 或http://localhost:55362/api/UserById?idvalue=2。它不适用于仅 httpclient 调用。
【问题讨论】:
-
请解释您所说的“不工作”是什么意思。怎么了?它是否抛出异常?如果有,请提供详细信息,
-
NO 它没有抛出异常。它返回此消息:未找到与请求 URI 'localhost:49963/api/User/UserById 匹配的 HTTP 资源在控制器“用户”上未找到与名称“UserById”匹配的操作
标签: asp.net-mvc asp.net-web-api httpwebrequest dotnet-httpclient asp.net-routing