Also habe ich einen Provider erstellt, der alle meine Code behandelt. Ursprünglich sah wie folgt aus:C# WebApi-Provider IHttpActionResult in der Klassenbibliothek
public class AnswerProvider : ApiController
{
private readonly IUnitOfWork _unitOfWork;
private readonly AnswerService _answerService;
private QuestionService _questionService;
public QuestionService QuestionService => _questionService ?? (_questionService = new QuestionService(this._unitOfWork));
public AnswerProvider(IUnitOfWork unitOfWork)
{
this._unitOfWork = unitOfWork;
this._answerService = new AnswerService(unitOfWork);
}
public async Task<IHttpActionResult> CreateAsync(AnswerRequestModel model)
{
try
{
// Validate our answer count
await ValidateAnswerCountAsync(model.QuestionId);
// Create our model
var answer = ModelFactory.Create(model);
// Add our images to our answer
answer.Images = model.Images;
// Save our model
this._answerService.Create(answer);
// Save the database changes
await this._unitOfWork.SaveChangesAsync();
// Return our updated model
return Ok(ModelFactory.Create(answer));
// If there is an error
}
catch (Exception ex)
{
// Return our error
return BadRequest(ex.Message.ToString());
}
}
/// <summary>
/// Validates the answers based on the question type
/// </summary>
/// <param name="id">The id of the question</param>
/// <returns></returns>
private async Task ValidateAnswerCountAsync(int id)
{
// Get our question
var question = await this.QuestionService.GetAsync(id, "Answers");
// If we have 3 answers or more
if (question.Answers.Count >= 3 && question.Type == QuestionType.Boolean)
{
// Throw an error
throw new InvalidOperationException("A Boolean question can only have 3 answers");
}
}
}
ich geerbt ApiController, weil ich Zugang zu den Ok gewinnen wollen, BadRequest und andere Methoden, das ist der einzige Grund. Wenn ich versuche, diesen Code auszuführen, obwohl es kompiliert ich diesen Fehler:
HttpControllerContext.Configuration must not be null
Ich gehe davon aus, dass liegt daran, dass ich die ApiController zu erben versuche und ich hätte das nicht tun. Gibt es einen anderen Weg, ich kann auf die Ok und andere ähnliche Methoden zugreifen, ohne die ApiController erben. Bitte beachten Sie, dass ich mehr als einen Anbieter haben werde.
Erben Sie nicht von ApiController, sondern nur diese Methoden zu Ihrer neuen Klasse hinzufügen, da sie nicht so viel Code in sich sind. Sie können den Quellcode über Visual Studio oder Dotpeek (kostenlos) oder online abrufen. – Igor
Ich schaue mir den Code an und es scheint nicht wirklich so einfach zu sein. Es scheint hier und überall viele kleine Codes zu geben. – r3plica
Alternativ können Sie eine HttpStatusCode-Instanz zurückgeben und den ApiController damit umbrechen lassen, wenn der Wert 200 (Erfolg/Ok) in einer 'StatusCodeResult'-Instanz nicht übereinstimmt. – Igor