Ric*_*ick 11 c# asp.net asp.net-web-api
我是ASP.NET webapi的新手,我找不到返回id查询对象列表的方法.
这是我的GET请求的控制器方法.我想返回所有通过网址传递指定问卷的问题.
我试过这个:
// GET: api/Questions/5
[ResponseType(typeof(List<Question>))]
public Task<IHttpActionResult> GetQuestion(int questionnaireId)
{
var questions = from q in db.Questions
where q.QuestionnaireId == questionnaireId
select new Question()
{
Id = q.Id,
ImageLink = q.ImageLink,
QuestionnaireId = q.QuestionnaireId,
Text = q.Text
};
return questions;
}
Run Code Online (Sandbox Code Playgroud)
这是我的问题类:
public class Question
{
public int Id { get; set; }
[ForeignKey("Questionnaire")]
public int QuestionnaireId { get; set; }
public string Text { get; set; }
public string ImageLink { get; set; }
public virtual Questionnaire Questionnaire { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
但return questions
它上面显示编译器错误:
无法隐式转换
System.Linq.IQueryable<finah_backend.Models.Question>
为System.Web.Http.IHttpActionResult
.存在显式转换(您是否错过了演员?)
我想得到一份问卷清单,这些问题是在问卷调查中查询的,这是通过网址传递的,即api/questions/2 ==>通过问卷调查ID = 2给我回复所有问题.
Cod*_*ter 11
您正在使用该[ResponseType]
属性,但这仅用于生成文档,请参阅MSDN:ResponseTypeAttribute类:
当声明的返回类型为HttpResponseMessage或IHttpActionResult时,使用此选项指定操作返回的实体类型.生成ApiDescription时,ApiExplorer将读取ResponseType.
您可以更改返回类型(并删除属性,因为不再需要该属性,因为将从实际签名生成返回类型文档):
public IEnumerable<Question> GetQuestion(int questionnaireId)
Run Code Online (Sandbox Code Playgroud)
或者,如果您希望它是异步的:
public async Task<IEnumerable<Question>> GetQuestion(int questionnaireId)
Run Code Online (Sandbox Code Playgroud)
或者将结果包装在一个IHttpActionResult
方法Request.CreateResponse<T>()
中:
return Request.CreateResponse<IEnumerable<Question>>(HttpStatusCode.OK, questions);
Run Code Online (Sandbox Code Playgroud)
如果您调用ApiController.Ok()
方法,后者将为您完成:
return Ok(questions);
Run Code Online (Sandbox Code Playgroud)
只需简单地返回它,你需要使用ApiController现在提供的一个很好的方法.
这将返回状态代码200以及您的问题集.
[ResponseType(typeof(List<Question>))]
public async Task<IHttpActionResult> GetQuestion(int questionnaireId)
{
var questions = from q in db.Questions
where q.QuestionnaireId == questionnaireId
select new Question()
{
Id = q.Id,
ImageLink = q.ImageLink,
QuestionnaireId = q.QuestionnaireId,
Text = q.Text
};
return this.Ok(questions);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
22952 次 |
最近记录: |