简体   繁体   English

Restier获取存储过程功能以处理HTTP请求

[英]Restier getting stored procedure function to work HTTP request

I have a RESTier Website using the latest version. 我有一个使用最新版本的RESTier网站。 All my entities and views I created from the database with EF 6 work fine, but I cannot seem to get the stored procedures I brought in to work. 我使用EF 6从数据库创建的所有实体和视图都可以正常工作,但是似乎无法使引入的存储过程起作用。 As the documentation is a little sparse I'm not sure if I need to implement anything beyond to basic startup of the service. 由于文档有点稀疏,所以我不确定是否需要执行除基本启动服务之外的任何操作。

When sending this URI via Postman I get a 404 error not found: http://192.168.1.20:60666/api/MIC_REST/up_BomAssemParts_s_ByJobID_FmNumber_WorkArea_TEST(jobID=252 , fmNumber= 98, workAreas='A13,D12,A3,A9,A7,A10') 通过邮递员发送此URI时,我未找到404错误: http : //192.168.1.20 :60666/api/MIC_REST/up_BomAssemParts_s_ByJobID_FmNumber_WorkArea_TEST(jobID=252,fmNumber = 98,workAreas ='A13,D12,A3,A9,A7 ,A10' )

I basically have stock setup of service below. 我基本上在下面有服务的库存设置。 Any help in whether it might be the URI or the setup would be greatly appreciated. 无论是URI还是设置,都将提供任何帮助。

WebApiConfig : WebApiConfig

public static class WebApiConfig
{
    public async static void Register(HttpConfiguration config)
    {
        config.EnableSystemDiagnosticsTracing();
        config.Filter().Expand().Select().OrderBy().MaxTop(1000).Count();
        await config.MapRestierRoute<EntityFrameworkApi<MICdB>>(
            "MIC_REST", "api/MIC_REST", new Microsoft.Restier.Publishers.OData.Batch.RestierBatchHandler(GlobalConfiguration.DefaultServer));
    }
}

public virtual ObjectResult<up_BomAssemParts_s_ByJobID_FmNumber_WorkArea_Result_TEST> up_BomAssemParts_s_ByJobID_FmNumber_WorkArea_TEST( Nullable<int> jobID, Nullable<int> fmNumber, string workAreas)
{
    var jobIDParameter = jobID.HasValue ?
            new ObjectParameter("JobID", jobID) :
            new ObjectParameter("JobID", typeof(int));

    var fmNumberParameter = fmNumber.HasValue ?
            new ObjectParameter("FmNumber", fmNumber) :
            new ObjectParameter("FmNumber", typeof(int));

    var workAreasParameter = workAreas != null ?
            new ObjectParameter("WorkAreas", workAreas) :
            new ObjectParameter("WorkAreas", typeof(string));

    return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<up_BomAssemParts_s_ByJobID_FmNumber_WorkArea_Result_TEST>("up_BomAssemParts_s_ByJobID_FmNumber_WorkArea_TEST",  jobIDParameter, fmNumberParameter, workAreasParameter);
}

public partial class up_BomAssemParts_s_ByJobID_FmNumber_WorkArea_Result_TEST
{
    public string BomAssemShipMark { get; set; }
    public string CurrentLocation { get; set; }
    public int Quantity { get; set; }
    public string PlPiecemark { get; set; }
    public string MatSizeText { get; set; }
    public string LengthText { get; set; }
    public string GradeDescription { get; set; }
    public string PlPiecemarkPrefix { get; set; }
    public int PlPiecemarkSuffix { get; set; }
    public string PlCodes { get; set; }
    public string PlPremark { get; set; }
    public Nullable<int> FmNumber { get; set; }
}

After banging my head on trying to get an ODataController to work, I have giving up and resorted to using an Apicontroller, which ended up being very simple to implement. 在竭尽全力尝试使ODataController正常工作之后,我放弃了,只能使用Apicontroller,最终实现起来非常简单。 With an ODataController, I could never get a URL to work or if I tried to add an oDataRoute, an error always resulted. 使用ODataController时,我永远无法使URL正常工作,或者如果我尝试添加oDataRoute,总是会导致错误。 It seems absurd that with all the fairly useless examples posted using ResTier the one real world example that one would expect (a stored procedure that returns a list of non-entity data for UI view purposes) seems non-existent. 似乎很荒谬的是,在所有使用ResTier发布的相当无用的示例中,似乎不存在一个真实的示例(一个存储过程返回了用于UI视图的非实体数据的列表)。 ResTier seems to work great for EntitySets but this mess I found myself in makes me question it (or Odata not sure where the fault is). ResTier似乎对EntitySets很有用,但是我发现自己陷入的混乱使我对此表示怀疑(或者Odata不确定错误在哪里)。 Oh well, below gets the data...now to find a compress to fix the welt on my forehead.... 哦,好了,下面获取了数据。。。现在找到一种压缩方法来固定额头上的伤口。

   [System.Web.Http.RoutePrefix("spapi/MIC_REST")]
public class SPController :ApiController
{
    private MICdB db = new MICdB();

    [System.Web.Http.Route("part/{jobID:int}/{fmNumber:int}/{workAreas}")]
   // [EnableQuery]
     public List<up_BomAssemParts_s_ByJobID_FmNumber_WorkArea_Result> GetPartsLists([FromODataUri]int jobID, [FromODataUri]int fmNumber, [FromODataUri]string workAreas)
    {
        return db.up_BomAssemParts_s_ByJobID_FmNumber_WorkArea_TEST(jobID, fmNumber, workAreas).ToList();
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM