Web API и View в одном контроллере - PullRequest
0 голосов
/ 16 января 2019

Я создаю веб-сайт, который будет иметь более 50 оптических расчетов. Мне нужно, чтобы они были доступны через API, но мне также нужно, чтобы они были доступны в представлении. У меня есть .dll, которая делает вычисления, к которым обращаются в контроллере, помеченном именем «тип» вычислений. В данном случае это PrismController, который обрабатывает все вычисления, связанные с Prism. Я только показываю расчет апикального угла.

Является ли способ, которым я делаю это, оптимальным в отношении лучших практик? Прежде чем я создам 50 из них, я хотел бы знать, иду ли я по неверному пути.

Похоже, много кода.

Код в представлении - это то, что я использую для одного вычисления.

[Produces("application/json")]
[Route("api/v1/[controller]")] <----------api route at controller level
public class PrismController : Controller
{
    [HttpGet("ApicalAngle/{DegreesDeviation}/{Index}")]
    public ActionResult<PrismModel> ApicalAngle(PrismModel prism)
    {
        if (!ModelState.IsValid)
            return BadRequest(ModelState);

        prism.Result = Prism.ApicalAngle(prism.DegreesDeviation, prism.Index);

        return prism;
    }

    [Route("/[Controller]/[Action]")] <----view route overriding api route
    [HttpGet("ApicalAngle")]
    public IActionResult ApicalAngleCalc()
    {
        return View();
    }

    [HttpPost("ApicalAngle")]<------- Post that performs calculation
    public ActionResult<PrismModel> ApicalAngleCalc(PrismModel prism)
    {
        if (!ModelState.IsValid)
            return BadRequest(ModelState);

        var dev = prism.DegreesDeviation;

        prism.Result = Prism.ApicalAngle(prism.DegreesDeviation, prism.Index);

        return View(prism);
    }
...